<?php

class Comanda {
	
	public $id_comanda;							
	public $id_firma_sol;						public $id_client;
	public $nr_factura_sol;						public $suma_sol;					
	public $taxe_supl_to_sol;					public $penaliz_from_sol;
	public $data_tr_acte_sol; 	//data trimiterii acetelor catre solicitant
	public $suma_totala_sol;					public $moneda_sol;
	public $id_firma_exec;						public $nr_factura_exec;
	public $suma_exec;							public $taxe_supl_from_exec;
	public $penaliz_to_exec;
	public $data_primirii_acte_exec;			//data primirii actelor de la executant
	public $suma_totala_exec;					public $moneda_exec;
	public $id_contact_sol;						public $id_contact_exec;
	public $data_scadenta_sol;					public $data_scadenta_exec;
    public $zile_scadenta_sol;                  public $zile_scadenta_exec;
	public $data_factura_sol;			//data facutrarii solicitantului
	public $data_factura_exec;			//data facturarii din partea executantului
	public $coment_sol;					//comentarii
	public $coment_exec;				//comentarii
	public $_cmr_sol;							public $_factura_sol;
	public $_carnet_tir_sol;					public $_decl_vamala_sol;
	public $_alte_acte_sol;						public $_text_alte_acte_sol;
	public $_cmr_exec;							public $_factura_exec;
	public $_carnet_tir_exec;					public $_decl_vamala_exec;
	public $_alte_acte_exec;					public $_text_alte_acte_exec;
	public $stare_incasare_sol;			//0 - neincasat; 1 - partial; 2 - incasat
	public $stare_plata_exec;			//0 - neplatit; 1 - partial; 2 - platit
	public $nume_sofer;							public $tel_sofer;
	public $nr_inmatriculare;					public $fel_camion;
	// out of date *************
    //public $fel_marfa;							public $tonaj;
//	public $data_incarcarii;					public $data_descarcarii;
//    public $alte_conditii;
//    *************************	
	public $deleted;					//0 - Nesters; 1 - Sters
	public $version;					//Prin cate modificari a trecut
	public $created_by;					//Id-ul userului ce a creat comanda
    public $data_comenzii;    
	public $data_comanda_sol;	
	public $nr_comanda_exec;            // (!!!!!!!!!!!!!!!!!!!! trebuie pus peste tot)	
	public $nr_comanda_sol;	
    // Campuri noi
    public $nr_km;
    public $tva_inclus_exec;
    public $status;
    public $nr_referinta_sol;
    public $interna_externa;
	
	public $adrese_vama_import = array();				
	public $adrese_vama_export = array();
	public $adrese_incarcare = array();
	public $adrese_descarcare = array();
	public $plati = array();				
	
	//campuri folosite doar cateodata!!
	public $_external_firma_sol;
	public $_external_firma_exec;
	
	public $_external_contact_sol;
	public $_external_contact_exec;
	
	
	public function __construct($id_client, $id_user) {
		
//		aici nu se completeaza created by...se pune $id_user dar care nu e nici unde primit :(
		$this->id_client = $id_client;
	    $this->id_comanda = CT_NOT_SAVED_YET;
	    $this->version = 0;
        $this->id_firma_sol = 0;
        $this->nr_comanda_sol = '';
	    $this->nr_factura_sol = '';					$this->suma_sol = 0;
	    $this->taxe_supl_to_sol = 0;				$this->penaliz_from_sol = 0;
	    $this->data_tr_acte_sol = null; 	//data primirii acetelor de la solicitant
	    $this->suma_totala_sol = 0;					$this->moneda_sol = 0;
	    $this->id_firma_exec = 0;					$this->nr_factura_exec = '';
    	$this->suma_exec = 0;						$this->taxe_supl_from_exec = 0;
    	$this->penaliz_to_exec = 0;
    	$this->data_primirii_acte_exec = null;			//data trimiterii actelor catre executant
    	$this->suma_totala_exec = 0;				$this->moneda_exec = 0;
    	$this->id_contact_sol = null;					$this->id_contact_exec = null;
        $this->data_scadenta_sol = null;            $this->data_scadenta_exec = null;
    	$this->zile_scadenta_sol = null;			$this->zile_scadenta_exec = null;
    	$this->data_factura_sol = null;			    //data facutrarii solicitantului
    	$this->data_factura_exec = null;			//data facturarii din partea executantului
    	$this->coment_sol = '';					    //comentarii
    	$this->coment_exec = '';				        //comentarii
    	$this->_cmr_sol = CT_ACT_NECESAR_SI_NEEXISTENT;						
    	$this->_factura_sol = CT_ACT_NECESAR_SI_NEEXISTENT;
    	$this->_carnet_tir_sol = CT_ACT_NENECESAR;					
    	$this->_decl_vamala_sol = CT_ACT_NENECESAR;
    	$this->_alte_acte_sol = CT_ACT_NENECESAR;					
    	$this->_text_alte_acte_sol = '';
    	$this->_cmr_exec = CT_ACT_NECESAR_SI_NEEXISTENT;						
    	$this->_factura_exec = CT_ACT_NECESAR_SI_NEEXISTENT;
    	$this->_carnet_tir_exec = CT_ACT_NENECESAR;				
    	$this->_decl_vamala_exec = CT_ACT_NENECESAR;
    	$this->_alte_acte_exec = CT_ACT_NENECESAR;				
    	$this->_text_alte_acte_exec = '';
    	$this->stare_incasare_sol = CT_COMANDA_NEINCASATA;			//0 - neincasat = 0; 1 - partial = 0; 2 - incasat
    	$this->stare_plata_exec = CT_COMANDA_NEPLATITA;			//0 - neplatit = 0; 1 - partial = 0; 2 - platit
    	$this->nume_sofer = '';						$this->tel_sofer = '';
    	$this->nr_inmatriculare = '';				$this->fel_camion = '';
    	// not used anymore
        //$this->fel_marfa = '';						$this->tonaj = 0;
//    	$this->data_incarcarii = null;				$this->data_descarcarii = null;
//    	$this->alte_conditii = '';
        // *******************
    	$this->deleted = CT_NOT_DELETED;				//0 - Nesters = 0; 1 - Sters				//Prin cate modificari a trecut
    	$this->created_by = $id_user;					//Id-ul userului ce a creat comanda
        $this->data_comenzii = date('Y-m-d');           //Data cand s-a creat comanda
    	$this->data_comanda_sol = date('Y-m-d');		//Data cand s-a creat comanda solicitantului
    	
    	$this->nr_km = 0;
        // Pentru moment punem ca default neinclus TVA-ul
    	$this->tva_inclus_exec = CT_TVA_NEINCLUS_EXEC;
    	$this->status = '';
        $this->nr_referinta_sol = '';
	}
	
	public static function queryLoadById($db, $id_comanda, $id_client) {
	    $query = $db->prepare("SELECT *
                    			FROM comanda
                				WHERE id = :id_comanda
                    			AND id_client = :id_client AND deleted = :deleted");
	    
	    $query->bindParam(':id_comanda', 	$id_comanda);
	    $query->bindParam(':id_client', 	$id_client);
	    $query->bindValue(':deleted', 	CT_NOT_DELETED);
	    
	    try {
	    	$db->beginTransaction();
	        if ($query->execute() === FALSE) { 
                $errInfo = $query->errorInfo();
                $errInfo = $errInfo[2];
	        	$query->closeCursor();
	        	throw new QueryLoadComandaException("Failed loading comanda with id " . $id_comanda . "and id client = " . $id_client . $errInfo);            
	        }
	            
	    	$data = $query->fetch(PDO::FETCH_ASSOC); 
	        
	    	if (empty($data)) throw new QueryLoadComandaException("Comanda empty with id " . $id_comanda . "and id client = " . $id_client);
	        $comanda = new Comanda($data['id_client'], $data['created_by']);
	        
	        //$comanda->id_client = $data['id_client'];
	        $comanda->id_comanda = $data['id'];							            $comanda->id_firma_sol = $data['id_firma_sol'];
	    	$comanda->nr_factura_sol = $data['nr_factura_sol'];						$comanda->suma_sol = $data['suma_sol'];
	    	$comanda->taxe_supl_to_sol = $data['taxe_supl_to_sol'];					$comanda->penaliz_from_sol = $data['penaliz_from_sol'];
	    	$comanda->data_tr_acte_sol = $data['data_tr_acte_sol'];   //data primirii acetelor de la solicitant
	    	$comanda->suma_totala_sol = $data['suma_totala_sol'];					$comanda->moneda_sol = $data['moneda_sol'];
	    	$comanda->id_firma_exec = $data['id_firma_exec'];						$comanda->nr_factura_exec = $data['nr_factura_exec'];
	    	$comanda->suma_exec = $data['suma_exec'];							    $comanda->taxe_supl_from_exec = $data['taxe_supl_from_exec'];
	    	$comanda->penaliz_to_exec = $data['penaliz_to_exec'];
	    	$comanda->data_primirii_acte_exec = $data['data_primirii_acte_exec'];		//data trimiterii actelor catre executant
	    	$comanda->suma_totala_exec = $data['suma_totala_exec'];					$comanda->moneda_exec = $data['moneda_exec'];
	    	$comanda->id_contact_sol = $data['id_contact_sol'];						$comanda->id_contact_exec = $data['id_contact_exec'];
            $comanda->data_scadenta_sol = $data['data_scadenta_sol'];                $comanda->data_scadenta_exec = $data['data_scadenta_exec'];
	    	$comanda->zile_scadenta_sol = $data['zile_scadenta_sol'];				$comanda->zile_scadenta_exec = $data['zile_scadenta_exec'];
	    	$comanda->data_factura_sol = $data['data_factura_sol'];			//data facutrarii solicitantului
	    	$comanda->data_factura_exec = $data['data_factura_exec'];		//data facturarii din partea executantului
	    	$comanda->coment_sol = $data['coment_sol'];					    //comentarii
	    	$comanda->coment_exec = $data['coment_exec'];				        //comentarii
	    	$comanda->_cmr_sol = $data['_cmr_sol'];							        $comanda->_factura_sol = $data['_factura_sol'];
	    	$comanda->_carnet_tir_sol = $data['_carnet_tir_sol'];					$comanda->_decl_vamala_sol = $data['_decl_vamala_sol'];
	    	$comanda->_alte_acte_sol = $data['_alte_acte_sol'];						$comanda->_text_alte_acte_sol = $data['_text_alte_acte_sol'];
	    	$comanda->_cmr_exec = $data['_cmr_exec'];							    $comanda->_factura_exec = $data['_factura_exec'];
	    	$comanda->_carnet_tir_exec = $data['_carnet_tir_exec'];					$comanda->_decl_vamala_exec = $data['_decl_vamala_exec'];
	    	$comanda->_alte_acte_exec = $data['_alte_acte_exec'];					$comanda->_text_alte_acte_exec = $data['_text_alte_acte_exec'];
	    	$comanda->stare_incasare_sol = $data['stare_incasare_sol'];		//0 - neincasat = $data['ana']; 1 - partial = $data['ana']; 2 - incasat
	    	$comanda->stare_plata_exec = $data['stare_plata_exec'];			//0 - neplatit = $data['ana']; 1 - partial = $data['ana']; 2 - platit
	    	$comanda->nume_sofer = $data['nume_sofer'];							    $comanda->tel_sofer = $data['tel_sofer'];
	    	$comanda->nr_inmatriculare = $data['nr_inmatriculare'];					$comanda->fel_camion = $data['fel_camion'];
	    	$comanda->fel_marfa = $data['fel_marfa'];							    $comanda->tonaj = $data['tonaj'];
	    	$comanda->data_incarcarii = $data['data_incarcarii'];					$comanda->data_descarcarii = $data['data_descarcarii'];
	    	$comanda->alte_conditii = $data['alte_conditii'];
	    	$comanda->deleted = $data['deleted'];					        //0 - Nesters = $data['ana']; 1 - Sters
	    	$comanda->version = $data['version'];					        //Prin cate modificari a trecut
	    	$comanda->created_by = $data['created_by'];					    //Id-ul userului ce a creat comanda
            $comanda->data_comenzii = $data['data_comenzii'];        
	    	$comanda->data_comanda_sol = $data['data_comanda_sol'];		
	    	$comanda->nr_comanda_exec = $data['nr_comanda_exec'];		
            $comanda->nr_comanda_sol = $data['nr_comanda_sol'];   
            
            $comanda->nr_km = $data['nr_km'];
            $comanda->tva_inclus_exec = $data['tva_inclus_exec'];
            $comanda->status = $data['status'];
            $comanda->nr_referinta_sol = $data['nr_referinta_sol'];
            $comanda->interna_externa = $data['interna_externa'];
                 
	    	$comanda->id_client = $id_client;
	
	    	$query->closeCursor();
	    	
	    	//incarcam adresele   	
	    	
	        $comanda->adrese_vama_import = Address::queryLoadByComandaForLocuri($db, $comanda->id_comanda, CT_ADRESA_COMANDA_VAMA_IMPORT);    	
	        $comanda->adrese_vama_export = Address::queryLoadByComandaForLocuri($db, $comanda->id_comanda, CT_ADRESA_COMANDA_VAMA_EXPORT);    	
	        $comanda->adrese_incarcare = Address::queryLoadByComandaForLocuri($db, $comanda->id_comanda, CT_ADRESA_COMANDA_INCARCARE);    	
	        $comanda->adrese_descarcare = Address::queryLoadByComandaForLocuri($db, $comanda->id_comanda, CT_ADRESA_COMANDA_DESCARCARE);    	
	    	
	        //incarcam platile                     
	        $comanda->plati = Comanda::queryLoadPlatiByComanda($db, $comanda->id_comanda, $comanda->id_client);
	        
	        
	    
	        $db->commit();
    		return $comanda;			
	    }
	    catch (QueryLoadComandaException $e) {			
			$db->rollBack();	
			throw new QueryLoadFirmaException("COMANDA - Failed loading comanda with id: " . $id_comanda . $e->getMessage() . $errInfo);
		}
		catch (QueryLoadAddressException $e) {
			$db->rollBack();	
			throw new QueryLoadFirmaException("COMANDA - ADDRESS - Failed loading address for comanda with id: " . $id_comanda . $e->getMessage() . $errInfo);
		}
		catch (QueryLoadPlatiComandaException $e) {
			$db->rollBack();	
			throw new QueryLoadFirmaException("COMANDA - PLATI - Failed loading plati for comanda with id: " . $id_comanda . $e->getMessage() . $errInfo);
		}
	    
	}

	public static function queryLoadByIdWithAllData($db, $id_comanda, $id_client) {
	    $query = "SELECT * , 
	    			( SELECT nume AS firma_sol
						FROM firme, comanda
						WHERE comanda.id_firma_sol = firme.id
							AND comanda.id = $id_comanda
						LIMIT 1
					) AS firma_sol,
	    			( SELECT nume AS firma_exec
						FROM firme, comanda
						WHERE comanda.id_firma_exec = firme.id
							AND comanda.id = $id_comanda
						LIMIT 1
					) AS firma_exec,
	    			( SELECT nume AS contact_sol
						FROM contact, comanda
						WHERE comanda.id_contact_sol = contact.id
							AND comanda.id = $id_comanda
						LIMIT 1
					) AS contact_sol,
	    			( SELECT nume AS contact_exec
						FROM contact, comanda
						WHERE comanda.id_contact_exec = contact.id
							AND comanda.id = $id_comanda
						LIMIT 1
					) AS contact_exec
										
					FROM comanda
					WHERE id = $id_comanda
						AND id_client = $id_client
						AND deleted = " . CT_COMANDA_NESTERS . "
					LIMIT 1";
	    
		if (($result = $db->query($query)) === FALSE) {
            $errInfo = $query->errorInfo();
            $errInfo = $errInfo[2];
           	throw new QueryLoadComandaException("Failed loading all information for comanda with id: " . $id_comanda . $errInfo);
		}         
		    
	    try {
	        $data = $result->fetch(PDO::FETCH_ASSOC);
   	        if (empty($data)) throw new QueryLoadComandaException("Comanda goala: " . $id_comanda);
	        $comanda = new Comanda($data['id_client'], $data['created_by']);
	        
	        //$comanda->id_client = $data['id_client'];
	        $comanda->id_comanda = $data['id'];							            $comanda->id_firma_sol = $data['id_firma_sol'];
	    	$comanda->nr_factura_sol = $data['nr_factura_sol'];						$comanda->suma_sol = $data['suma_sol'];
	    	$comanda->taxe_supl_to_sol = $data['taxe_supl_to_sol'];					$comanda->penaliz_from_sol = $data['penaliz_from_sol'];
	    	$comanda->data_tr_acte_sol = $data['data_tr_acte_sol'];   //data primirii acetelor de la solicitant
	    	$comanda->suma_totala_sol = $data['suma_totala_sol'];					$comanda->moneda_sol = $data['moneda_sol'];
	    	$comanda->id_firma_exec = $data['id_firma_exec'];						$comanda->nr_factura_exec = $data['nr_factura_exec'];
	    	$comanda->suma_exec = $data['suma_exec'];							    $comanda->taxe_supl_from_exec = $data['taxe_supl_from_exec'];
	    	$comanda->penaliz_to_exec = $data['penaliz_to_exec'];
	    	$comanda->data_primirii_acte_exec = $data['data_primirii_acte_exec'];		//data trimiterii actelor catre executant
	    	$comanda->suma_totala_exec = $data['suma_totala_exec'];					$comanda->moneda_exec = $data['moneda_exec'];
	    	$comanda->id_contact_sol = $data['id_contact_sol'];						$comanda->id_contact_exec = $data['id_contact_exec'];
            $comanda->data_scadenta_sol = $data['data_scadenta_sol'];                $comanda->data_scadenta_exec = $data['data_scadenta_exec'];
	    	$comanda->zile_scadenta_sol = $data['zile_scadenta_sol'];				$comanda->zile_scadenta_exec = $data['zile_scadenta_exec'];
	    	$comanda->data_factura_sol = $data['data_factura_sol'];			//data facutrarii solicitantului
	    	$comanda->data_factura_exec = $data['data_factura_exec'];		//data facturarii din partea executantului
	    	$comanda->coment_sol = $data['coment_sol'];					    //comentarii
	    	$comanda->coment_exec = $data['coment_exec'];				        //comentarii
	    	$comanda->_cmr_sol = $data['_cmr_sol'];							        $comanda->_factura_sol = $data['_factura_sol'];
	    	$comanda->_carnet_tir_sol = $data['_carnet_tir_sol'];					$comanda->_decl_vamala_sol = $data['_decl_vamala_sol'];
	    	$comanda->_alte_acte_sol = $data['_alte_acte_sol'];						$comanda->_text_alte_acte_sol = $data['_text_alte_acte_sol'];
	    	$comanda->_cmr_exec = $data['_cmr_exec'];							    $comanda->_factura_exec = $data['_factura_exec'];
	    	$comanda->_carnet_tir_exec = $data['_carnet_tir_exec'];					$comanda->_decl_vamala_exec = $data['_decl_vamala_exec'];
	    	$comanda->_alte_acte_exec = $data['_alte_acte_exec'];					$comanda->_text_alte_acte_exec = $data['_text_alte_acte_exec'];
	    	$comanda->stare_incasare_sol = $data['stare_incasare_sol'];		//0 - neincasat = $data['ana']; 1 - partial = $data['ana']; 2 - incasat
	    	$comanda->stare_plata_exec = $data['stare_plata_exec'];			//0 - neplatit = $data['ana']; 1 - partial = $data['ana']; 2 - platit
	    	$comanda->nume_sofer = $data['nume_sofer'];							    $comanda->tel_sofer = $data['tel_sofer'];
	    	$comanda->nr_inmatriculare = $data['nr_inmatriculare'];					$comanda->fel_camion = $data['fel_camion'];
	    	$comanda->fel_marfa = $data['fel_marfa'];							    $comanda->tonaj = $data['tonaj'];
	    	$comanda->data_incarcarii = $data['data_incarcarii'];					$comanda->data_descarcarii = $data['data_descarcarii'];
	    	$comanda->alte_conditii = $data['alte_conditii'];
	    	$comanda->deleted = $data['deleted'];					        //0 - Nesters = $data['ana']; 1 - Sters
	    	$comanda->version = $data['version'];					        //Prin cate modificari a trecut
	    	$comanda->created_by = $data['created_by'];					    //Id-ul userului ce a creat comanda
	    	$comanda->data_comenzii = $data['data_comenzii'];
	    	$comanda->data_comanda_sol = $data['data_comanda_sol'];			
	    	$comanda->nr_comanda_exec = $data['nr_comanda_exec'];		
            $comanda->nr_comanda_sol = $data['nr_comanda_sol'];        
	    	$comanda->id_client = $id_client;
	
	    	//incarcam adresele   	
	    	
	        $comanda->adrese_vama_import = Address::queryLoadByComandaForLocuri($db, $comanda->id_comanda, CT_ADRESA_COMANDA_VAMA_IMPORT);    	
	        $comanda->adrese_vama_export = Address::queryLoadByComandaForLocuri($db, $comanda->id_comanda, CT_ADRESA_COMANDA_VAMA_EXPORT);    	
	        $comanda->adrese_incarcare = Address::queryLoadByComandaForLocuri($db, $comanda->id_comanda, CT_ADRESA_COMANDA_INCARCARE);    	
	        $comanda->adrese_descarcare = Address::queryLoadByComandaForLocuri($db, $comanda->id_comanda, CT_ADRESA_COMANDA_DESCARCARE);    	
	    	
	        //incarcam platile                     
	        $comanda->plati = Comanda::queryLoadPlatiByComanda($db, $comanda->id_comanda, $id_client);

		    	
	        $comanda->_external_firma_sol = $data['firma_sol'];
	    	$comanda->_external_firma_exec = $data['firma_exec'];
	    	
	    	$comanda->_external_contact_sol = $data['contact_sol'];
	    	$comanda->_external_contact_exec = $data['contact_exec'];
	    		        
	        $comanda->nr_km = $data['nr_km'];
	        $comanda->tva_inclus_exec = $data['tva_inclus_exec'];
	        $comanda->status = $data['status'];
	        $comanda->nr_referinta_sol = $data['nr_referinta_sol'];
            $comanda->interna_externa = $data['interna_externa'];
	        
    		return $comanda;			
	    }
	    
	    //eu zic ca nu mai trebuie rollback pentru ca doar facem select
	    catch (QueryLoadComandaException $e) {				
			throw new QueryLoadFirmaException("COMANDA - Failed loading comanda with id: " . $id_comanda . $e->getMessage() . $errInfo);
		}
		catch (QueryLoadAddressException $e) {	
			throw new QueryLoadFirmaException("COMANDA - ADDRESS - Failed loading address for comanda with id: " . $id_comanda . $e->getMessage() . $errInfo);
		}
		catch (QueryLoadPlatiComandaException $e) {	
			throw new QueryLoadFirmaException("COMANDA - PLATI - Failed loading plati for comanda with id: " . $id_comanda . $e->getMessage() . $errInfo);
		}
	    
	}	
	
	public function queryInsert($db) {
		$query = $db->prepare("INSERT INTO comanda (		`id_client`	,        	`id_firma_sol` ,	 	`nr_factura_sol` ,      `nr_comanda_sol`,
												            `suma_sol` ,	   	 	`taxe_supl_to_sol` ,    `penaliz_from_sol` ,    `data_tr_acte_sol` ,
				    										`suma_totala_sol` ,		`moneda_sol` ,			`id_firma_exec` ,		`nr_factura_exec` ,
				    										`suma_exec` ,			`taxe_supl_from_exec` ,	`penaliz_to_exec` ,		`data_primirii_acte_exec` ,    										
				    										`suma_totala_exec` ,	`moneda_exec` ,			`id_contact_sol` ,		`id_contact_exec` ,
													    	`data_scadenta_sol` ,	`data_scadenta_exec` , 	`data_factura_sol` ,	`data_factura_exec` ,
													    	`coment_sol` ,		    `coment_exec` ,	    	`_cmr_sol` ,			`_factura_sol` ,
													    	`_carnet_tir_sol` ,		`_decl_vamala_sol` ,   	`_alte_acte_sol` ,		`_text_alte_acte_sol` ,
													    	`_cmr_exec` ,			`_factura_exec` ,    	`_carnet_tir_exec` ,	`_decl_vamala_exec` ,
													    	`_alte_acte_exec` ,		`_text_alte_acte_exec` ,`stare_incasare_sol` ,	`stare_plata_exec` ,
													    	`nume_sofer` ,			`tel_sofer` ,	    	`nr_inmatriculare` , 	`fel_camion` ,
													    	`deleted` , 	    	`version` ,			    `created_by` ,
													    	`data_comenzii`,        `data_comanda_sol`,     `zile_scadenta_sol`,    `zile_scadenta_exec`,
                                                            `nr_comanda_exec`, 		`nr_km`, 				`tva_inclus_exec`, 
                                                            `status`, 				`nr_referinta_sol`,     `interna_externa`
									  				)
				                    		VALUES 	(		:id_client	,           :id_firma_sol ,	 		:nr_factura_sol ,       :nr_comanda_sol,
												            :suma_sol ,	   	 		:taxe_supl_to_sol ,     :penaliz_from_sol ,     :data_tr_acte_sol ,
				    										:suma_totala_sol ,		:moneda_sol ,			:id_firma_exec ,		:nr_factura_exec ,				    										
				    										:suma_exec ,			:taxe_supl_from_exec ,	:penaliz_to_exec ,		:data_primirii_acte_exec ,    										
				    										:suma_totala_exec ,		:moneda_exec ,			:id_contact_sol ,		:id_contact_exec ,
													    	:data_scadenta_sol ,	:data_scadenta_exec ,  	:data_factura_sol ,		:data_factura_exec ,													    	
													    	:coment_sol ,		    :coment_exec ,	    	:_cmr_sol ,			    :_factura_sol ,
													    	:_carnet_tir_sol ,		:_decl_vamala_sol ,    	:_alte_acte_sol ,		:_text_alte_acte_sol ,
													    	:_cmr_exec ,			:_factura_exec ,    	:_carnet_tir_exec ,		:_decl_vamala_exec ,													    	
													    	:_alte_acte_exec ,		:_text_alte_acte_exec ,	:stare_incasare_sol ,	:stare_plata_exec ,
													    	:nume_sofer ,			:tel_sofer ,	    	:nr_inmatriculare , 	:fel_camion ,
													    	:deleted , 		    	:version ,			    :created_by ,
													    	:data_comenzii	,       :data_comanda_sol,      :zile_scadenta_sol,     :zile_scadenta_exec,
                                                            :nr_comanda_exec ,		:nr_km,					:tva_inclus_exec,
                                                            :status,				:nr_referinta_sol,      :interna_externa 								    			                    		
                    				  				)");

		
		$query->bindParam('id_client', 					($this->id_client));
		$query->bindParam(':id_firma_sol', 				($this->id_firma_sol));
        $query->bindParam(':nr_factura_sol',            ($this->nr_factura_sol));
		$query->bindParam(':nr_comanda_sol', 			($this->nr_comanda_sol));
		$query->bindParam(':suma_sol', 					($this->suma_sol));
		$query->bindParam(':taxe_supl_to_sol', 			($this->taxe_supl_to_sol));
		$query->bindParam(':penaliz_from_sol', 			($this->penaliz_from_sol));
		$query->bindParam(':data_tr_acte_sol', 	        ($this->data_tr_acte_sol));
		$query->bindParam(':suma_totala_sol', 			($this->suma_totala_sol));
		$query->bindParam(':moneda_sol', 				($this->moneda_sol));
		$query->bindParam(':id_firma_exec', 			($this->id_firma_exec));
        $query->bindParam(':nr_factura_exec',           ($this->nr_factura_exec));        
		$query->bindParam(':nr_comanda_exec', 			($this->nr_comanda_exec));		
		$query->bindParam(':suma_exec', 				($this->suma_exec));
		$query->bindParam(':taxe_supl_from_exec', 		($this->taxe_supl_from_exec));
		$query->bindParam(':penaliz_to_exec', 			($this->penaliz_to_exec));
		$query->bindParam(':data_primirii_acte_exec', 	($this->data_primirii_acte_exec));
		$query->bindParam(':suma_totala_exec', 			($this->suma_totala_exec));
		$query->bindParam(':moneda_exec', 				($this->moneda_exec));
		$query->bindParam(':id_contact_sol', 			($this->id_contact_sol));
		$query->bindParam(':id_contact_exec',			($this->id_contact_exec));
		$query->bindParam(':data_scadenta_sol', 		($this->data_scadenta_sol));
        $query->bindParam(':data_scadenta_exec',        ($this->data_scadenta_exec));
        $query->bindParam(':zile_scadenta_sol',         ($this->zile_scadenta_sol));
		$query->bindParam(':zile_scadenta_exec', 		($this->zile_scadenta_exec));
		$query->bindParam(':data_factura_sol', 			($this->data_factura_sol));
		$query->bindParam(':data_factura_exec', 		($this->data_factura_exec));		
		$query->bindParam(':coment_sol', 				($this->coment_sol));
		$query->bindParam(':coment_exec', 				($this->coment_exec));
		$query->bindParam(':_cmr_sol', 					($this->_cmr_sol));
		$query->bindParam(':_factura_sol', 				($this->_factura_sol));
		$query->bindParam(':_carnet_tir_sol', 			($this->_carnet_tir_sol));
		$query->bindParam(':_decl_vamala_sol', 			($this->_decl_vamala_sol));
		$query->bindParam(':_alte_acte_sol', 			($this->_alte_acte_sol));
		$query->bindParam(':_text_alte_acte_sol', 		($this->_text_alte_acte_sol));
		$query->bindParam(':_cmr_exec', 				($this->_cmr_exec));
		$query->bindParam(':_factura_exec', 			($this->_factura_exec));
		$query->bindParam(':_carnet_tir_exec', 			($this->_carnet_tir_exec));
		$query->bindParam(':_decl_vamala_exec', 		($this->_decl_vamala_exec));		
		$query->bindParam(':_alte_acte_exec', 			($this->_alte_acte_exec));
		$query->bindParam(':_text_alte_acte_exec', 		($this->_text_alte_acte_exec));
		$query->bindParam(':stare_incasare_sol', 		($this->stare_incasare_sol));
		$query->bindParam(':stare_plata_exec', 			($this->stare_plata_exec));
		$query->bindParam(':nume_sofer', 				($this->nume_sofer));
		$query->bindParam(':tel_sofer', 				($this->tel_sofer));
		$query->bindParam(':nr_inmatriculare', 			($this->nr_inmatriculare));
		$query->bindParam(':fel_camion', 				($this->fel_camion));
		$query->bindParam(':deleted', 					($this->deleted));
		$query->bindParam(':version', 					($this->version));
		$query->bindParam(':created_by', 				($this->created_by));		
        $query->bindParam(':data_comenzii',             ($this->data_comenzii));
		$query->bindParam(':data_comanda_sol', 			($this->data_comanda_sol));
		
		$query->bindParam(':nr_km', 					($this->nr_km));
		$query->bindParam(':tva_inclus_exec', 			($this->tva_inclus_exec));
		$query->bindParam(':status', 					($this->status));
        $query->bindParam(':nr_referinta_sol',             ($this->nr_referinta_sol));                                
		$query->bindParam(':interna_externa', 			($this->interna_externa));								
		
        // Verifica unicitate nr. de comanda
        $nr_comanda = $this->nr_comanda_exec;
        $id_client = $this->id_client;
        $q = "select * from comanda
                where 
                    nr_comanda_exec = '$nr_comanda'
                    AND id_client = $id_client";
        
        try {  		
			$db->beginTransaction();
            
            $result = $db->query($q);                                
            if ($result === FALSE) {
                $errInfo = $query->errorInfo();
                $errInfo = $errInfo[2];
                throw new QueryInsertComandaException($errInfo);
            }    
            else {                                                
                $count = 0;
                while($row = $result->fetch(PDO::FETCH_ASSOC)) {
                    $count++;
                }
            }
            if ($count != 0)
                throw new QueryNumarComandaException("Numarul de comanda trebuie sa fie unic!");
			
			if ($query->execute() === FALSE) {
                $errInfo = $query->errorInfo();
                $errInfo = $errInfo[2];
				$query->closeCursor();	
				throw new QueryInsertComandaException($errInfo);
			}
            //completam id-ul
            
            $this->id_comanda = (int) $db->lastInsertId(); 					
        	//inseram adresele
            for ($i = 0; $i < count($this->adrese_vama_import); $i++)
        	    if ($this->adrese_vama_import != null) {
        		    $this->adrese_vama_import[$i]->id_owner = $this->id_comanda;
        		    $this->adrese_vama_import[$i]->queryInsertAddress($db);
        	    }
            for ($i = 0; $i < count($this->adrese_vama_export); $i++)
        	    if ($this->adrese_vama_export != null) {
        		    $this->adrese_vama_export[$i]->id_owner = $this->id_comanda;
        		    $this->adrese_vama_export[$i]->queryInsertAddress($db);
        	    }
        	for ($i = 0; $i < count($this->adrese_incarcare); $i++)        	
        		if ($this->adrese_incarcare != null) {
        			$this->adrese_incarcare[$i]->id_owner = $this->id_comanda;
        			$this->adrese_incarcare[$i]->queryInsertAddress($db);
        		}
        	for ($i = 0; $i < count($this->adrese_descarcare); $i++)
        		if ($this->adrese_descarcare != null) {
        			$this->adrese_descarcare[$i]->id_owner = $this->id_comanda;
        			$this->adrese_descarcare[$i]->queryInsertAddress($db);
        		}
        
        	//inseram platile
        	for ($i = 0; $i < count($this->plati); $i++)
        		$this->plati[$i]->queryInsert($db);
        		
        	$db->commit();
        } 
        catch (QueryNumarComandaException $e) {
            $db->rollBack();        //maybe NOT needed ????
            $query->closeCursor();
            throw new QueryNumarComandaException($e->getMessage());
        }
        catch (QueryInsertComandaException $e) {
        	$db->rollBack();		//maybe NOT needed ????
        	$query->closeCursor();
        	throw new QueryInsertComandaException("Failed inserting comanda for client with id: " . $this->id_client . $e->getMessage() . $errInfo);
        }
        catch (QueryInsertAddressException $e) {
        	$db->rollBack();
        	$query->closeCursor();
  			throw new QueryInsertComandaException("Failed inserting comanda for client with id: " . $this->id_client . " reason: address ". $e->getMessage() . $errInfo);
        }
        catch (QueryInsertPlatiComandaException $e) {
        	$db->rollBack();
        	$query->closeCursor();
        	throw new QueryInsertComandaException("Failed inserting comanda for client with id: " . $this->id_client . " reason: plati ". $e->getMessage() . $errInfo);
        }                        
	}
	
	public static function queryDeleteById($db, $id_comanda) {
      	$query = $db->prepare("UPDATE comanda SET deleted = :CT_COMANDA_STERS 
      							WHERE id = :id_comanda");

      	$query->bindValue(':CT_COMANDA_STERS', CT_COMANDA_STERS);
      	$query->bindParam(':id_comanda', ($id_comanda));
		
      	try {
			$db->beginTransaction();
      	
	      	if ($query->execute() === FALSE) {
	            $errInfo = $query->errorInfo();
	            $errInfo = $errInfo[2];
	    	  	$query->closeCursor();
	      		throw new QueryDeleteComandaException("Failed deleting comanda with id " . $id_comanda . $errInfo);
	      	}	    	  	
	      	$query->closeCursor();
	      	PlatiComanda::queryDeleteByComanda($db, $id_comanda);	      
	      	
	       	$db->commit();
		    return CT_RESULT_OK;	      	
      	}
      	catch (QueryDeleteComandaException $e) {
			$db->rollBack();		
        	throw new QueryDeleteComandaException("Failed deleting comanda with id " . $id_comanda . $errInfo);      		      	
      	}
      	catch (QueryDeletePlatiComandaException $e) {
			$db->rollBack();		
        	throw new QueryDeletePlatiComandaException("Failed deleting plati comanda with id: " . $id_comanda . $errInfo);      		      	      	
      	}      	
	}
	
	public static function queryLoadPlatiByComanda($db, $id_comanda, $id_client) {
		$query = $db->prepare("SELECT p.id 
								FROM plati_comanda p, comanda c
								WHERE p.id_comanda = :id_comanda
									AND p.id_comanda = c.id
                                	AND c.id_client = :id_client ORDER BY p.id DESC");
        $query->bindParam(':id_comanda', $id_comanda);
		$query->bindParam(':id_client', $id_client);

		if ($query->execute() === FALSE) {
            $errInfo = $query->errorInfo();
            $errInfo = $errInfo[2];
			$query->closeCursor();
    	  	throw new QueryLoadPlatiComandaException("Failed loading plati for comanda with id " . $id_comanda . $errInfo);
		}
    			
        $plati = array();
        
        while ($data = $query->fetch(PDO::FETCH_ASSOC)) {
        	$plati[] = PlatiComanda::queryLoadById($db, $data['id'], $id_client);
        }
        	
        $query->closeCursor();
        return $plati;
	}
	
	public static function checkProprietaryIDs($db, $idComanda, $idClient) {
		$idComanda = explode("_", $idComanda);

		for ($i = 0; $i < count($idComanda); $i++) {	
			$query = $db->prepare("SELECT id_client 
									FROM comanda
									WHERE id = :id_comanda
									LIMIT 1");
			$query->bindParam(':id_comanda', $idComanda[$i]);

			
			if ($query->execute() === FALSE) {
                $errInfo = $query->errorInfo();
                $errInfo = $errInfo[2];
				$query->closeCursor();
    	  		throw new QueryCheckProprietaryIDsException("Faild checking proprietary ID for comanda with id: " . $id_comanda . " and idClient = " . $idClient . $errInfo);
			}
			
		 	$idClientFromDB = $query->fetch(PDO::FETCH_ASSOC);
        	if ($idClientFromDB['id_client'] != $idClient) {
        		//hack attempt ????
        		$query->closeCursor();
        		throw new comandaIDfromPlatiComandaBadUrlException("Forged URL");
        	}
		}
		return true;
	}
	
	public static function getStatusAndSumaKind($db, $id_comanda, $status_kind, $suma_kind, $nr_comanda, $moneda) {
		//todo: mysql injection!!!!!
		
		$query = "SELECT " . $status_kind . ', ' . $suma_kind . ', ' . $nr_comanda . ', ' . $moneda . ' FROM comanda ' .
					' WHERE id = ' . $id_comanda . ' AND deleted = 0;';						
		
		$result = $db->query($query);								
		
		if ($result === FALSE) {			
    	  	throw new QueryGetStatusComandaException("Failed fetching status from database for comanda with id: " . $id_comanda);
		}													
		
		$row = $result->fetch(PDO::FETCH_ASSOC);
		
		$data = array();										
		$data[$status_kind] = $row[$status_kind];
		$data[$suma_kind] = $row[$suma_kind];
		$data[$nr_comanda] = $row[$nr_comanda];
		$data[$moneda] = $row[$moneda];
		
		$result->closeCursor();		
		return $data;
	}
	
	public static function queryUpdateStareComanda($db, $idPlataComanda, $tipPlata) {
				
		$tipPlata == CT_PLATA_PLATA ? $stare2 = $stare2 = "stare_plata_exec" : $stare2 = "stare_incasare_sol";
		$stare2 == "stare_plata_exec" ? $sumaCamp = "suma_totala_exec" : $sumaCamp = "suma_totala_sol";		
		
		$idComanda = PlatiComanda::getComandaID($db, $idPlataComanda, $_SESSION['user_logat']->id_client);				
		$suma = (double) PlatiComanda::getPlataStatusForComanda($db, $idComanda, $tipPlata, $_SESSION['user_logat']->id_client);					
		
		$query = "SELECT " . $sumaCamp . " 
					FROM comanda 
					WHERE id = $idComanda
					LIMIT 1";
		$result = $db->query($query);
		
		if ($result === FALSE) {			
            $errInfo = $query->errorInfo();
                $errInfo = $errInfo[2];
    	  	throw new QueryUpdateStareComandaException("Faild updating stare for comanda." . $errInfo);    	  		      
		}															
		$row = $result->fetch(PDO::FETCH_ASSOC);
		$result->closeCursor();	
		
		$suma_din_comanda = (double)$row[$sumaCamp];

		//update to neplatita
		
		if ($suma == NULL)
			$suma = 0.0;					
		
		//update to neplatita	
		if ($suma == 0.0)
			$valoareStareComanda = CT_COMANDA_NEPLATITA; // putea fi si CT_COMANDA_NEINCASATA	- trebuie sa aiba aceleasi valori
		else 
			if ($suma < $suma_din_comanda) 
				$valoareStareComanda = CT_COMANDA_PLATITA_PARTIAL;	// putea fi si CT_COMANDA_INCASATA_PARTIAL	- trebuie sa aiba aceleasi valori
				
		$query = "UPDATE comanda 
					SET " . $stare2 . " = " . $valoareStareComanda . "
					WHERE id = " . $idComanda . "
					LIMIT 1";
					
		$result = $db->query($query);										
		
		if ($result === FALSE) {		
					echo "AICI 44";
    	  	throw new QueryUpdateStareComandaException("Faild updating stare for comanda.=====");
		}	
		$result->closeCursor();															
	}
	
	public function queryUpdate($db) {
		$this->version++;
		$query = $db->prepare("UPDATE comanda
				                SET `version` = :version , 							        `id_firma_sol` = :id_firma_sol , 
                                    `nr_comanda_sol` = :nr_comanda_sol ,                    `nr_comanda_exec` = :nr_comanda_exec , 
								    `nr_factura_sol` = :nr_factura_sol , 					`suma_sol` = :suma_sol , 
								    `taxe_supl_to_sol` = :taxe_supl_to_sol , 				`penaliz_from_sol` = :penaliz_from_sol , 
								    `data_tr_acte_sol` = :data_tr_acte_sol ,  	            `suma_totala_sol` = :suma_totala_sol , 					
								    `moneda_sol` = :moneda_sol , 						    `id_firma_exec` = :id_firma_exec , 					
								    `nr_factura_exec` = :nr_factura_exec , 			    	`suma_exec` = :suma_exec , 												    								    	
								    `taxe_supl_from_exec` = :taxe_supl_from_exec , 	    	`penaliz_to_exec` = :penaliz_to_exec , 
							    	`data_primirii_acte_exec` = :data_primirii_acte_exec , 	`suma_totala_exec` = :suma_totala_exec , 				
							    	`moneda_exec` = :moneda_exec , 					    	`id_contact_sol` = :id_contact_sol , 					
							    	`id_contact_exec` = :id_contact_exec , 			    	`data_scadenta_sol` = :data_scadenta_sol , 			
                                    `data_scadenta_exec` = :data_scadenta_exec ,            `zile_scadenta_sol` = :zile_scadenta_sol ,                
							    	`zile_scadenta_exec` = :zile_scadenta_exec , 	    	`data_factura_sol` = :data_factura_sol , 			   
							    	`data_factura_exec` = :data_factura_exec , 			   	`coment_sol` = :coment_sol , 					    
							    	`coment_exec` = :coment_exec ,				        	`_cmr_sol` = :_cmr_sol ,
							    	`_factura_sol` = :_factura_sol , 				    	`_carnet_tir_sol` = :_carnet_tir_sol ,							    								    	
							    	`_decl_vamala_sol` = :_decl_vamala_sol , 		    	`_alte_acte_sol` = :_alte_acte_sol ,
							    	`_text_alte_acte_sol` = :_text_alte_acte_sol ,	    	`_cmr_exec` =   :_cmr_exec ,
							    	`_factura_exec` = :_factura_exec ,				    	`_carnet_tir_exec` = :_carnet_tir_exec ,
							    	`_decl_vamala_exec` = :_decl_vamala_exec ,		    	`_alte_acte_exec` = :_alte_acte_exec ,
							    	`_text_alte_acte_exec` = :_text_alte_acte_exec ,    	`stare_incasare_sol` = :stare_incasare_sol ,							    	
							    	`stare_plata_exec` = :stare_plata_exec ,		    	`nume_sofer` = :nume_sofer ,
							    	`tel_sofer` = :tel_sofer ,						    	`nr_inmatriculare` = :nr_inmatriculare , 
							    	`fel_camion` = :fel_camion ,					    	
							    	`deleted` =  :deleted , 						    	`created_by` =  :created_by ,					
							    	`data_comenzii` =  :data_comenzii,                      `data_comanda_sol` = :data_comanda_sol,
							    	`nr_km` = :nr_km,	                                    `tva_inclus_exec` = :tva_inclus_exec,
							    	`status` = :status,	                                    `nr_referinta_sol` = :nr_referinta_sol,
                                    `interna_externa` = :interna_externa					    									    					 				    	
				                WHERE id = :id_comanda
				                AND version < :version");
		
		$query->bindParam(':version', 				($this->version));
		$query->bindParam(':id_firma_sol', 			($this->id_firma_sol));
        $query->bindParam(':nr_comanda_sol',        ($this->nr_comanda_sol));
        $query->bindParam(':nr_comanda_exec',         ($this->nr_comanda_exec));
		$query->bindParam(':nr_factura_sol', 		($this->nr_factura_sol));
		$query->bindParam(':suma_sol', 				($this->suma_sol));
		$query->bindParam(':taxe_supl_to_sol', 		($this->taxe_supl_to_sol));
		$query->bindParam(':penaliz_from_sol', 		($this->penaliz_from_sol));
		$query->bindParam(':data_tr_acte_sol',      ($this->data_tr_acte_sol));
		$query->bindParam(':suma_totala_sol', 		($this->suma_totala_sol));
		$query->bindParam(':moneda_sol', 			($this->moneda_sol));
		$query->bindParam(':id_firma_exec', 		($this->id_firma_exec));
        $query->bindParam(':nr_factura_exec',       ($this->nr_factura_exec));
		$query->bindParam(':suma_exec', 			($this->suma_exec));		
		$query->bindParam(':taxe_supl_from_exec', 	($this->taxe_supl_from_exec));
		$query->bindParam(':penaliz_to_exec', 		($this->penaliz_to_exec));
		$query->bindParam(':data_primirii_acte_exec', 	($this->data_primirii_acte_exec));
		$query->bindParam(':suma_totala_exec', 		($this->suma_totala_exec));
		$query->bindParam(':moneda_exec', 			($this->moneda_exec));
		$query->bindParam(':id_contact_sol', 		($this->id_contact_sol));
		$query->bindParam(':id_contact_exec', 		($this->id_contact_exec));
		$query->bindParam(':data_scadenta_sol', 	($this->data_scadenta_sol));
        $query->bindParam(':data_scadenta_exec',    ($this->data_scadenta_exec));
        $query->bindParam(':zile_scadenta_sol',     ($this->zile_scadenta_sol));
		$query->bindParam(':zile_scadenta_exec', 	($this->zile_scadenta_exec));
		$query->bindParam(':data_factura_sol', 		($this->data_factura_sol));
		$query->bindParam(':data_factura_exec', 	($this->data_factura_exec));
		$query->bindParam(':coment_sol', 			($this->coment_sol));
		$query->bindParam(':coment_exec', 			($this->coment_exec));
		$query->bindParam(':_cmr_sol', 				($this->_cmr_sol));
		$query->bindParam(':_factura_sol', 			($this->_factura_sol));
		$query->bindParam(':_carnet_tir_sol', 		($this->_carnet_tir_sol));		
		$query->bindParam(':_decl_vamala_sol', 		($this->_decl_vamala_sol));
		$query->bindParam(':_alte_acte_sol', 		($this->_alte_acte_sol));
		$query->bindParam(':_text_alte_acte_sol', 	($this->_text_alte_acte_sol));
		$query->bindParam(':_cmr_exec', 			($this->_cmr_exec));
		$query->bindParam(':_factura_exec', 		($this->_factura_exec));
		$query->bindParam(':_carnet_tir_exec', 		($this->_carnet_tir_exec));
		$query->bindParam(':_decl_vamala_exec', 	($this->_decl_vamala_exec));
		$query->bindParam(':_alte_acte_exec', 		($this->_alte_acte_exec));
		$query->bindParam(':_text_alte_acte_exec', 	($this->_text_alte_acte_exec));
		$query->bindParam(':stare_incasare_sol', 	($this->stare_incasare_sol));		
		$query->bindParam(':stare_plata_exec', 		($this->stare_plata_exec));
		$query->bindParam(':nume_sofer', 			($this->nume_sofer));
		$query->bindParam(':tel_sofer', 			($this->tel_sofer));
		$query->bindParam(':nr_inmatriculare', 		($this->nr_inmatriculare));
		$query->bindParam(':fel_camion', 			($this->fel_camion));
		$query->bindParam(':deleted', 				($this->deleted));
		$query->bindParam(':created_by', 			($this->created_by));
        $query->bindParam(':data_comenzii',         ($this->data_comenzii));
		$query->bindParam(':data_comanda_sol', 		($this->data_comanda_sol));
		$query->bindParam(':id_comanda', 			($this->id_comanda));
		$query->bindParam(':version', 				($this->version));

		$query->bindParam(':nr_km', 				($this->nr_km));
		$query->bindParam(':tva_inclus_exec', 		($this->tva_inclus_exec));
		$query->bindParam(':status', 				($this->status));
        $query->bindParam(':nr_referinta_sol',      ($this->nr_referinta_sol));                                
		$query->bindParam(':interna_externa', 		($this->interna_externa));								
		
        // Verifica unicitate nr. de comanda
        $nr_comanda = $this->nr_comanda_exec;
        $nr_referinta_sol = $this->nr_referinta_sol;
        $id_client = $this->id_client;
        $id_comanda = $this->id_comanda;
        $q = "select id, nr_comanda_exec 
                from comanda
                where 
                    nr_comanda_exec = '$nr_comanda'
                    AND id <> $id_comanda
                    AND id_client = $id_client"; 
                    
        $q2 = "select id, nr_referinta_sol 
                from comanda
                where 
                    nr_referinta_sol = '$nr_referinta_sol'
                    AND id <> $id_comanda
                    AND id_client = $id_client";  

        try {          
            $db->beginTransaction();
            
            // VERIFICARE UNICITATE NR_COMANDA_EXEC
            $result = $db->query($q);                                
            if ($result === FALSE) {
                $errInfo = $query->errorInfo();
                $errInfo = $errInfo[2];
                throw new QueryInsertComandaException($errInfo);
            }    
            else {                                                
                $count = 0;
                while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
                    $id_comanda_existenta = $row['id'];
                    $count++;
                }
            }
            if ($count >= 1 && $id_comanda_existenta != $this->id_comanda)
                throw new QueryNumarComandaException("Numarul de comanda trebuie sa fie unic!");
            // FINISH VERIFICARE	
                
            // VERIFICARE UNICITATE NR_REFERINTA_SOL
            $result = $db->query($q2);                                
            if ($result === FALSE) {
                $errInfo = $query->errorInfo();
                $errInfo = $errInfo[2];
                throw new QueryInsertComandaException($errInfo);
            }    
            else {                                                
                $count = 0;
                while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
                    $id_comanda_existenta = $row['id'];
                    $count++;
                }
            }
            if ($count >= 1 && $id_comanda_existenta != $this->id_comanda)
                throw new QueryNumarReferintaException("Numarul de referinta trebuie sa fie unic!");        
            // FINISH VERIFICARE
			
			if ($query->execute() === FALSE) {			
                $errInfo = $query->errorInfo();
                $errInfo = $errInfo[2];
	       		$query->closeCursor();
				throw new QueryUpdateComandaException("Failed updating comanda with id: " . $this->id_comanda . $errInfo);
			}

		    if ($query->rowCount() == 0) {
		    	$this->version--;
		    	$query->closeCursor();
	       		throw new QueryWrongVersionException("Failed updating comanda. Reason: wrong version!");
		    }
	    
	    	//update the addresses
            
	        //NEW, MODIFIED, DELETED for vama_import, vama_export
            for ($i = 0; $i < count($this->adrese_vama_import); $i++) {
                if ($this->adrese_vama_import[$i]->status == CT_ADDRESS_MODIFIED) 
                    $this->adrese_vama_import[$i]->queryUpdateAddress($db);
                    
                if ($this->adrese_vama_import[$i]->status == CT_ADDRESS_NEW) 
                    $this->adrese_vama_import[$i]->queryInsertAddress($db);
                    
                if ($this->adrese_vama_import[$i]->status == CT_ADDRESS_DELETED)
                    $this->adrese_vama_import[$i]->queryDeleteAddress($db);                
            }
        
		    for ($i = 0; $i < count($this->adrese_vama_export); $i++) {
                if ($this->adrese_vama_export[$i]->status == CT_ADDRESS_MODIFIED) 
                    $this->adrese_vama_export[$i]->queryUpdateAddress($db);
                    
                if ($this->adrese_vama_export[$i]->status == CT_ADDRESS_NEW) 
                    $this->adrese_vama_export[$i]->queryInsertAddress($db);
                    
                if ($this->adrese_vama_export[$i]->status == CT_ADDRESS_DELETED)
                    $this->adrese_vama_export[$i]->queryDeleteAddress($db);                
            }                                                                                                           
	    
		    //NEW, MODIFIED, DELETED for adrese_incarcare, adrese_descarcare
		    for ($i = 0; $i < count($this->adrese_incarcare); $i++) {
		    	if ($this->adrese_incarcare[$i]->status == CT_ADDRESS_MODIFIED) 
		    		$this->adrese_incarcare[$i]->queryUpdateAddress($db);
		    		
		    	if ($this->adrese_incarcare[$i]->status == CT_ADDRESS_NEW) 
		    		$this->adrese_incarcare[$i]->queryInsertAddress($db);
		    		
		    	if ($this->adrese_incarcare[$i]->status == CT_ADDRESS_DELETED)
		    		$this->adrese_incarcare[$i]->queryDeleteAddress($db);		    	
		    }
	    
		    for ($i = 0; $i < count($this->adrese_descarcare); $i++) {
		    	if ($this->adrese_descarcare[$i]->status == CT_ADDRESS_MODIFIED) 
		    		$this->adrese_descarcare[$i]->queryUpdateAddress($db);
		    		
		    	if ($this->adrese_descarcare[$i]->status == CT_ADDRESS_NEW) 
		    		$this->adrese_descarcare[$i]->queryInsertAddress($db);
		    		
		    	if ($this->adrese_descarcare[$i]->status == CT_ADDRESS_DELETED) 
		    		$this->adrese_descarcare[$i]->queryDeleteAddress($db);		    		
		    }
	       
		    $db->commit();
		    $query->closeCursor();
		    return CT_RESULT_OK;
 		}
        catch (QueryNumarComandaException $e) {
            $db->rollBack();        //maybe NOT needed ????
            $query->closeCursor();
            throw new QueryNumarComandaException($e->getMessage());
        }
 		catch (QueryUpdateAddressException $e) {
 			$db->rollBack();		//maybe NOT needed ????
 			$query->closeCursor();
        	throw new QueryUpdateComandaException("Failed updating comanda with id: " . $this->id_comanda . $e->getMessage() . $errInfo);
 		}
 		catch (QueryWrongVersionException $e) {
 			$db->rollBack();		//maybe NOT needed ????
 			$query->closeCursor();
        	throw new QueryUpdateComandaException("Failed updating comanda with id: " . $this->id_comanda . $e->getMessage() . $errInfo);
 		} 		
 		catch (QueryUpdateAddressException $e) {
 			$db->rollBack();		//maybe NOT needed ????
 			$query->closeCursor();
        	throw new QueryUpdateComandaException("Failed updating comanda with id: " . $this->id_comanda . $e->getMessage() . $errInfo);
 		}
 		catch (QueryInsertAddressException $e) {
 			$db->rollBack();		//maybe NOT needed ????
 			$query->closeCursor();
        	throw new QueryUpdateComandaException("Failed updating comanda with id: " . $this->id_comanda . $e->getMessage() . $errInfo);
 		}
 		catch (QueryDeleteAddressException $e) {
 			$db->rollBack();		//maybe NOT needed ????
 			$query->closeCursor();
        	throw new QueryUpdateComandaException("Failed updating comanda with id: " . $this->id_comanda . $e->getMessage() . $errInfo);
 		}        	
	}
	
	public function queryUpdateNrFacturaSol($db) {
		$this->version++;
		$query = $db->prepare("UPDATE comanda
				                SET `version` = :version,
								    `nr_factura_sol` = :nr_factura_sol		 				    	
				                WHERE id = :id_comanda
				                AND version < :version");
		
		$query->bindParam(':version', 				($this->version));
        $query->bindParam(':nr_factura_sol',        ($this->nr_factura_sol));
        $query->bindParam(':id_comanda',        ($this->id_comanda));
		            
        try {          
            if ($query->execute() === FALSE) {			
                $errInfo = $query->errorInfo();
                $errInfo = $errInfo[2];
	       		$query->closeCursor();
				throw new QueryUpdateComandaException("Failed updating comanda with id: " . $this->id_comanda . $errInfo);
			}

		    if ($query->rowCount() == 0) {
		    	$this->version--;
		    	$query->closeCursor();
	       		throw new QueryWrongVersionException("Failed updating comanda. Reason: wrong version!");
		    }
	    
		    $query->closeCursor();
		    return CT_RESULT_OK;
 		}
        catch (QueryUpdateComandaException $e) {
            $query->closeCursor();
            throw new QueryUpdateComandaException($e->getMessage());
        }
        catch (QueryWrongVersionException $e) {
            $query->closeCursor();
            throw new QueryWrongVersionException($e->getMessage());
        }
	}
    
    public static function queryStaticUpdateNrFacturaSol($db, $id_comanda, $id_client, $nr_factura_sol) {
        $query = $db->prepare("UPDATE comanda
                                SET `nr_factura_sol` = :nr_factura_sol                                 
                                WHERE id = :id_comanda
                                AND id_client = :id_client");
        
        $query->bindParam(':id_client',                 ($id_client));
        $query->bindParam(':nr_factura_sol',        ($nr_factura_sol));
        $query->bindParam(':id_comanda',        ($id_comanda));
                    
        try {          
            if ($query->execute() === FALSE) {            
                $errInfo = $query->errorInfo();
                $errInfo = $errInfo[2];
                   $query->closeCursor();
                   exit();
                throw new QueryUpdateComandaException("Failed updating comanda with id: " . $id_comanda . $errInfo);
            }

            $query->closeCursor();
            return CT_RESULT_OK;
         }
        catch (QueryUpdateComandaException $e) {
            $query->closeCursor();
            throw new QueryUpdateComandaException($e->getMessage());
        }
    }
	
	public static function queryLoadByIdClient($db, $id_client) {	    
		$query = $db->prepare("SELECT *
                    			FROM comanda
                				WHERE id_client = :id_client AND deleted = :deleted");
	    	    
	    $query->bindParam(':id_client', 	$id_client);
	    $query->bindValue(':deleted', 	CT_NOT_DELETED);
	    
        if ($query->execute() === FALSE) { 
            $errInfo = $query->errorInfo();
            $errInfo = $errInfo[2];
        	$query->closeCursor();        	
        	throw new QueryLoadComandaException("Failed loading comanda with id_client " . $id_client . $errInfo);            
        }
        
        $comenzi = array();     
        //TODO
        //$query->closeCursor();   

        while ($data = $query->fetch(PDO::FETCH_ASSOC)) {	        
        	$comanda = new Comanda($data['id_client'], $data['created_by']);
	                
	        $comanda->id_comanda = $data['id'];							            $comanda->id_firma_sol = $data['id_firma_sol'];
	    	$comanda->nr_factura_sol = $data['nr_factura_sol'];						$comanda->suma_sol = $data['suma_sol'];
	    	$comanda->taxe_supl_to_sol = $data['taxe_supl_to_sol'];					$comanda->penaliz_from_sol = $data['penaliz_from_sol'];
	    	$comanda->data_tr_acte_sol = $data['data_tr_acte_sol'];   //data primirii acetelor de la solicitant
	    	$comanda->suma_totala_sol = $data['suma_totala_sol'];					$comanda->moneda_sol = $data['moneda_sol'];
	    	$comanda->id_firma_exec = $data['id_firma_exec'];						$comanda->nr_factura_exec = $data['nr_factura_exec'];
	    	$comanda->suma_exec = $data['suma_exec'];							    $comanda->taxe_supl_from_exec = $data['taxe_supl_from_exec'];
	    	$comanda->penaliz_to_exec = $data['penaliz_to_exec'];
	    	$comanda->data_primirii_acte_exec = $data['data_primirii_acte_exec'];		//data trimiterii actelor catre executant
	    	$comanda->suma_totala_exec = $data['suma_totala_exec'];					$comanda->moneda_exec = $data['moneda_exec'];
	    	$comanda->id_contact_sol = $data['id_contact_sol'];						$comanda->id_contact_exec = $data['id_contact_exec'];
            $comanda->data_scadenta_sol = $data['data_scadenta_sol'];                $comanda->data_scadenta_exec = $data['data_scadenta_exec'];
	    	$comanda->zile_scadenta_sol = $data['zile_scadenta_sol'];				$comanda->zile_scadenta_exec = $data['zile_scadenta_exec'];
	    	$comanda->data_factura_sol = $data['data_factura_sol'];			//data facutrarii solicitantului
	    	$comanda->data_factura_exec = $data['data_factura_exec'];		//data facturarii din partea executantului
	    	$comanda->coment_sol = $data['coment_sol'];					    //comentarii
	    	$comanda->coment_exec = $data['coment_exec'];				        //comentarii
	    	$comanda->_cmr_sol = $data['_cmr_sol'];							        $comanda->_factura_sol = $data['_factura_sol'];
	    	$comanda->_carnet_tir_sol = $data['_carnet_tir_sol'];					$comanda->_decl_vamala_sol = $data['_decl_vamala_sol'];
	    	$comanda->_alte_acte_sol = $data['_alte_acte_sol'];						$comanda->_text_alte_acte_sol = $data['_text_alte_acte_sol'];
	    	$comanda->_cmr_exec = $data['_cmr_exec'];							    $comanda->_factura_exec = $data['_factura_exec'];
	    	$comanda->_carnet_tir_exec = $data['_carnet_tir_exec'];					$comanda->_decl_vamala_exec = $data['_decl_vamala_exec'];
	    	$comanda->_alte_acte_exec = $data['_alte_acte_exec'];					$comanda->_text_alte_acte_exec = $data['_text_alte_acte_exec'];
	    	$comanda->stare_incasare_sol = $data['stare_incasare_sol'];		//0 - neincasat = $data['ana']; 1 - partial = $data['ana']; 2 - incasat
	    	$comanda->stare_plata_exec = $data['stare_plata_exec'];			//0 - neplatit = $data['ana']; 1 - partial = $data['ana']; 2 - platit
	    	$comanda->nume_sofer = $data['nume_sofer'];							    $comanda->tel_sofer = $data['tel_sofer'];
	    	$comanda->nr_inmatriculare = $data['nr_inmatriculare'];					$comanda->fel_camion = $data['fel_camion'];
	    	$comanda->deleted = $data['deleted'];					        //0 - Nesters = $data['ana']; 1 - Sters
	    	$comanda->version = $data['version'];					        //Prin cate modificari a trecut
	    	$comanda->created_by = $data['created_by'];					    //Id-ul userului ce a creat comanda
            $comanda->data_comenzii = $data['data_comenzii'];    
	    	$comanda->data_comanda_sol = $data['data_comanda_sol'];	
	    	$comanda->nr_comanda_exec = $data['nr_comanda_exec'];		
	    	$comanda->nr_comanda_sol = $data['nr_comanda_sol'];			
	    	$comanda->id_client = $id_client;

	        $comanda->nr_km = $data['nr_km'];
	        $comanda->tva_inclus_exec = $data['tva_inclus_exec'];
	        $comanda->status = $data['status'];
            $comanda->nr_referinta_sol = $data['nr_referinta_sol'];
	        $comanda->interna_externa = $data['interna_externa'];
	    		        
	    	//incarcam adresele   		    	
	        $comanda->adrese_vama_import = Address::queryLoadByComandaForLocuri($db, $comanda->id_comanda, CT_ADRESA_COMANDA_VAMA_IMPORT);
	        $comanda->adrese_vama_export = Address::queryLoadByComandaForLocuri($db, $comanda->id_comanda, CT_ADRESA_COMANDA_VAMA_EXPORT);    	
	        $comanda->adrese_incarcare = Address::queryLoadByComandaForLocuri($db, $comanda->id_comanda, CT_ADRESA_COMANDA_INCARCARE);    	
	        $comanda->adrese_descarcare = Address::queryLoadByComandaForLocuri($db, $comanda->id_comanda, CT_ADRESA_COMANDA_DESCARCARE);    	
	    	
	        //incarcam platile                     
	        $comanda->plati = Comanda::queryLoadPlatiByComanda($db, $comanda->id_comanda, $id_client);
        	
	        $comenzi[] = $comanda;
        }    	       
        $query->closeCursor();
    	return $comenzi;		
	}	

	
	/*
	 * @author Flavius
	 * @param string $query query-ul initial care va fi completat
	 * @param string $sau_si parametrul din combo box
	 * @param integer #f_sol id-ul firmei solicitante
	 * @param integer $f_exec id-ul firmei executante
	 * @return string query-ul completat
	 * 
	 */
		
	private function complete_query_SAU_SI($query, $sau_si, $f_sol, $f_exec) {
        if ($sau_si == 'OR' || $sau_si == -1) {
        	
        	if ($f_sol != -1) {
        		$query .= " AND (id_firma_sol = " . $f_sol;
        		if ($f_exec != -1) {
        			$query .= " OR id_firma_exec = " . $f_exec . ")";
        		}
        		else $query .= ")";

        	}
        	else if ($f_exec != -1) {
        		$query .= " AND (id_firma_exec = $f_exec";
        		if ($f_sol != -1) {
        			$query .= " AND id_firma_sol = $f_sol)";
        		}
        		else $query .= ")";
        		
        	}
        }
        else if ($sau_si == 'AND') {
        	$query .= " AND (";
        	if ($f_sol != -1) $query .= " id_firma_sol = $f_sol";
        	if ($f_exec != -1) $query .= " AND id_firma_exec = $f_exec";
        	$query .= ")";
        }    

        return $query;        		
	}

	private static function getComenzi($db, $id_client, $pagina, $per_pag, $comanda_incasata, $comanda_platita, $scadenta_incasare, $scadenta_plata, $f_sol, $f_exec, $keyword, $val1, $val2, $camp = null, $order = null, $coloane_comenzi, $pret_min=null, $pret_max=null, $cost_min=null, $cost_max=null, $data_scadenta_sol1=null, $data_scadenta_sol2=null, $data_scadenta_exec1=null, $data_scadenta_exec2=null, $data_factura_sol1=null, $data_factura_sol2=null, $data_factura_exec1=null, $data_factura_exec2=null, $sc_incasare=null, $sc_plata=null, $cond_firme=null, $camp_sort, $sau_si = null, $filtru_incarcare = null, $val_adr = null) {
		
		$campuri_comenzi = explode(",", $coloane_comenzi);
		$keyword = strtolower($keyword);
		
		if (empty($camp_sort)) $camp_sort = "firma_sol";
		else if ($camp_sort == 'id_firma_sol') $camp_sort = "firma_sol";
		else if ($camp_sort == 'id_firma_exec') $camp_sort = "firma_exec";
		else if (!in_array($camp_sort, $campuri_comenzi)) $camp_sort = 'id_firma_sol';
		
		$query = "(SELECT comanda.id AS idd, comanda.*";
		$total_campuri = count($campuri_comenzi);
		
		$query .= ", (select nume as firma_sol 
						from firme, comanda 
						where 
							firme.id_client = $id_client
							and comanda.id_client = $id_client
							and comanda.id_firma_sol = firme.id 
							and comanda.id = idd 
							and comanda.deleted = " . CT_COMANDA_NESTERS . ") as firma_sol";
		$query .= ", (select nume as firma_exec 
						from firme, comanda 
						where 
							comanda.id_client=$id_client 
							and firme.id_client = $id_client 
							and comanda.id_firma_exec=firme.id 
							and comanda.id = idd 
							and comanda.id_client = $id_client
							and comanda.deleted = " . CT_COMANDA_NESTERS . ") as firma_exec";			
		
		$query .= ", (select nume as contact_sol 
						from contact, comanda 
						where 
							comanda.id_contact_sol=contact.id 
							and comanda.id_client = $id_client
							and comanda.id = idd 
							and comanda.deleted = " . CT_COMANDA_NESTERS . ") as contact_sol";			
		$query .= ", (select nume as contact_exec 
						from contact, comanda 
						where 
							comanda.id_contact_exec=contact.id 
							and comanda.id = idd 
							and comanda.id_client = $id_client
							and comanda.deleted = " . CT_COMANDA_NESTERS . ") as contact_exec";			

		$query .= " FROM comanda ";
		
//		var_dump($filtru_incarcare);
		if (isset($filtru_incarcare) && !empty($filtru_incarcare)) 
			$query .= " LEFT JOIN adresa
					ON adresa.id_owner = comanda.id
						AND adresa.tip = " . CT_ADRESA_COMANDA;
										
	    $query .= " WHERE comanda.id_client = $id_client ";

	    if ($filtru_incarcare == "incarcare" || $filtru_incarcare == 'descarcare')
	    	$query .= " AND (adresa.oras LIKE '%$val_adr%' OR adresa.tara LIKE '%$val_adr%'
	    					OR adresa.oras LIKE '%$val_adr%') ";
	    				
	   	if ($filtru_incarcare == "incarcare")
	    	$query .= " AND adresa.tip_loc = " . CT_ADRESA_COMANDA_INCARCARE;

	   	if ($filtru_incarcare == "descarcare")
			$query .= " AND adresa.tip_loc = " . CT_ADRESA_COMANDA_DESCARCARE;
			
	    if ($filtru_incarcare == "data_incarcare")
	    	$query .= " AND (DATE(adresa.data) >= $val1 AND DATE(adresa.data) <= $val2 AND adresa.tip_loc = " . CT_ADRESA_COMANDA_INCARCARE . ") ";
	    
	    if ($filtru_incarcare == "data_descarcare")
	    	$query .= " AND (DATE(adresa.data) >= $val1 AND DATE(adresa.data) <= $val2 AND adresa.tip_loc = " . CT_ADRESA_COMANDA_DESCARCARE . ") ";
	    	
	    $query .= " AND deleted = " . CT_COMANDA_NESTERS;
        if ($filtru_incarcare == 'data_incarcare' || $filtru_incarcare == 'data_descarcare')
        	$query .= " GROUP BY comanda.id ";    
        	  
        if ($pret_min != '') $query .= " AND suma_totala_sol >= $pret_min";
        if ($pret_max != '') $query .= " AND suma_totala_sol <= $pret_max";
        if ($cost_min != '') $query .= " AND suma_totala_exec >= $cost_min";
        if ($cost_max != '') $query .= " AND suma_totala_exec <= $cost_max";
        if ($data_scadenta_sol1 != '') $query .= " AND data_scadenta_sol >= '$data_scadenta_sol1'";
        if ($data_scadenta_sol2 != '') $query .= " AND data_scadenta_sol <= '$data_scadenta_sol2'";
        if ($data_scadenta_exec1 != '') $query .= " AND data_scadenta_exec >= '$data_scadenta_exec1'";
        if ($data_scadenta_exec2 != '') $query .= " AND data_scadenta_exec <= '$data_scadenta_exec2'";
        if ($data_factura_sol1 != '') $query .= " AND data_factura_sol >= '$data_factura_sol1'";
        if ($data_factura_sol2 != '') $query .= " AND data_factura_sol <= '$data_factura_sol2'";    
        if ($data_factura_exec1 != '') $query .= " AND data_factura_exec >= '$data_factura_exec1'";    
        if ($data_factura_exec2 != '') $query .= " AND data_factura_exec <= '$data_factura_exec2'";
        
        if ($sc_incasare != '' && $sc_incasare != -1) $query .= " AND DATEDIFF(CURDATE(), data_scadenta_sol) <= " . ($sc_incasare * 7);        
        if ($sc_plata != '' && $sc_plata != -1) $query .= " AND DATEDIFF(CURDATE(), data_scadenta_exec) <= " . ($sc_plata * 7);    
        if ($cond_firme == 'OR' && $f_sol != -1 && $f_exec != -1) $query .= " AND (id_firma_sol = $f_sol OR id_firma_exec = $f_exec)";        
        if ($cond_firme == 'AND' && $f_sol != -1 && $f_exec != -1) $query .= " AND id_firma_sol = $f_sol AND id_firma_exec = $f_exec";
                             
        if ($comanda_incasata != -1 && $comanda_incasata != '' && $comanda_incasata != CT_COMANDA_NEINCASATA_INCASATA_PARTIAL) $query .= " AND stare_incasare_sol = $comanda_incasata";
		if ($comanda_incasata == CT_COMANDA_NEINCASATA_INCASATA_PARTIAL) $query .= " AND stare_incasare_sol <= " . CT_COMANDA_INCASATA_PARTIAL; // aici intra si comenzile neincasate cu codul 0        

		if ($comanda_platita != -1 && $comanda_platita != '' && $comanda_platita != CT_COMANDA_NEPLATITA_PLATITA_PARTIAL) $query .= " AND stare_plata_exec = $comanda_platita";           
		if ($comanda_platita == CT_COMANDA_NEPLATITA_PLATITA_PARTIAL) $query .= " AND stare_plata_exec <= " . CT_COMANDA_PLATITA_PARTIAL; //(aici intra si comenzile neplatite cu codul 0)
		
        if ($scadenta_incasare != -1 && $scadenta_incasare != '') $query .= " AND DATEDIFF(CURDATE(), data_scadenta_sol) <= " . ($scadenta_incasare * 7);
        if ($scadenta_plata != -1 && $scadenta_plata != '') $query .= " AND DATEDIFF(CURDATE(), data_scadenta_exec) <= "  . ($scadenta_plata * 7);
                
        if ($camp == -1 && $keyword != -1 && $keyword != '' && $camp != '') { // adica a cautat in toate campurile
            $query .= " AND (      
                                   LOWER(alte_conditii) LIKE '%$keyword%'
                                OR LOWER(data_descarcarii) LIKE '%$keyword%' OR LOWER(data_incarcarii) LIKE '%$keyword%'  
                                OR LOWER(tonaj) LIKE '%$keyword%' OR LOWER(fel_marfa) LIKE '%$keyword%'   
                                OR LOWER(fel_camion) LIKE '%$keyword%' OR LOWER(nr_inmatriculare) LIKE '%$keyword%'   
                                OR LOWER(tel_sofer) LIKE '%$keyword%' OR LOWER(nume_sofer) LIKE '%$keyword%'   
                                OR LOWER(data_comanda_sol) LIKE '%$keyword%' OR LOWER(data_comenzii) LIKE '%$keyword%'   
                                OR LOWER(_text_alte_acte_exec) LIKE '%$keyword%' OR LOWER(_text_alte_acte_sol) LIKE '%$keyword%'   
                                OR LOWER(coment_exec) LIKE '%$keyword%' OR LOWER(coment_sol) LIKE '%$keyword%'   
                                OR LOWER(data_factura_exec) LIKE '%$keyword%' OR LOWER(data_factura_sol) LIKE '%$keyword%'   
                                OR LOWER(zile_scadenta_exec) LIKE '%$keyword%' OR LOWER(zile_scadenta_sol) LIKE '%$keyword%'   
                                OR LOWER(data_scadenta_exec) LIKE '%$keyword%' OR LOWER(data_scadenta_sol) LIKE '%$keyword%'   
                                OR LOWER(suma_totala_exec) LIKE '%$keyword%' OR LOWER(data_primirii_acte_exec) LIKE '%$keyword%'   
                                OR LOWER(penaliz_to_exec) LIKE '%$keyword%' OR LOWER(taxe_supl_from_exec) LIKE '%$keyword%'   
                                OR LOWER(suma_exec) LIKE '%$keyword%' OR LOWER(nr_factura_exec) LIKE '%$keyword%'   
                                OR LOWER(suma_totala_sol) LIKE '%$keyword%' OR LOWER(data_tr_acte_sol) LIKE '%$keyword%'   
                                OR LOWER(penaliz_from_sol) LIKE '%$keyword%' OR LOWER(taxe_supl_to_sol) LIKE '%$keyword%'   
                                OR LOWER(suma_sol) LIKE '%$keyword%' OR LOWER( nr_factura_sol) LIKE '%$keyword%'   
                                OR LOWER(nr_comanda_sol) LIKE '%$keyword%'
                                AND comanda.id_client = $id_client
                            )";   
        }

        if ($keyword != -1 && $keyword != '' && $camp != -1 && isset($camp) && !empty($camp)) $query .= " AND LOWER($camp) LIKE '%$keyword%'";
		$camp_original = $camp;
//		var_dump($camp);
        if (!empty($val1) && isset($val1) && isset($camp) && $camp != '') {
       		//daca are 1 in fata trebuie sa il scot....1 semnifica ca e un camp cu interval intre atat si atat
            $camp = substr($camp_original, 1);
            if ($val1 != -1) {
            	$query .= " AND $camp >= $val1";
            }
        }   
                                                    
        if (!empty($val2) && isset($val2) && isset($camp) && $camp != '') {
       		//daca are 1 in fata trebuie sa il scot....1 semnifica ca e un camp cu interval intre atat si atat       		
            $camp = substr($camp_original, 1);
            if ($val2 != -1) {
				$query .= " AND $camp <= $val2";
            }            
        }           
        $camp = $camp_original;
        /*
         * completez query-ul in functie de sau_si
         */
        $query = Comanda::complete_query_SAU_SI($query, $sau_si, $f_sol, $f_exec);      
        
        if ($camp == -1 && $keyword != -1 && $camp != '' && $keyword != '') { // adica a cautat in toate campurile
            
        	// CAUT acum si numele de firma ... fac un nou query si bag union cu primul
            // CAUT asa si adresele!!
            
            //----ACUM firmele solicitante----///
            //trebuie tinut cont ca daca a selectat de exemplu doar firmele solicitante cu un
            //anumit id atunci doar pe acelea se le extrag
            $query .= ") UNION DISTINCT ";
            $query .= " (SELECT comanda.id AS idd, comanda.*,
                            (select nume as firma_sol 
                            	from firme, comanda 
                            	where comanda.id_client=$id_client 
                            		and firme.id_client = $id_client 
                            		and comanda.id_firma_sol=firme.id 
                            		and comanda.id_client = $id_client
                            		and comanda.id = idd 
                            		and comanda.deleted = " . CT_COMANDA_NESTERS . ") as firma_sol, 
                            (select nume as firma_exec 
                            	from firme, comanda 
                            	where 
                            		comanda.id_client=$id_client 
                            		and firme.id_client = $id_client 
                            		and comanda.id_client = $id_client
                            		and comanda.id_firma_exec=firme.id 
                            		and comanda.id = idd 
                            		and comanda.deleted = " . CT_COMANDA_NESTERS . ") as firma_exec,        
                            (select nume as contact_sol 
                            	from contact, comanda 
                            	where 
                            		comanda.id_client = $id_client                            		
                            		and comanda.id_contact_sol=contact.id 
                            		and comanda.id = idd 
                            		and comanda.deleted = " . CT_COMANDA_NESTERS . ") as contact_sol,
                            (select nume as contact_exec 
                            	from contact, comanda 
                            	where 
                            		comanda.id_contact_exec=contact.id 
                            		and comanda.id_client = $id_client
                            		and comanda.id = idd
                            		and comanda.id_client = $id_client 
                            		and comanda.deleted = " . CT_COMANDA_NESTERS . ") as contact_exec                            
                            FROM comanda
                            LEFT JOIN firme ON firme.id = comanda.id_firma_sol
                            WHERE 
                            	LOWER(firme.nume) LIKE '%$keyword%'
                            	AND comanda.id_client = $id_client
                                AND comanda.deleted = " . CT_COMANDA_NESTERS;
			$query = Comanda::complete_query_SAU_SI($query, $sau_si, $f_sol, $f_exec);                                	                                

            //----ACUM firmele executante----///
            $query .= ") UNION DISTINCT ";
            $query .= " (SELECT comanda.id AS idd, comanda.*, 
                            (select nume as firma_sol 
                            	from firme, comanda 
                            	where 
                            		comanda.id_client=$id_client 
                            		and firme.id_client = $id_client 
                            		and comanda.id_client = $id_client
                            		and comanda.id_firma_sol=firme.id 
                            		and comanda.id = idd 
                            		and comanda.deleted = " . CT_COMANDA_NESTERS . ") as firma_sol, 
                            (select nume as firma_exec 
                            	from firme, comanda 
                            	where 
                            		comanda.id_client=$id_client 
                            		and firme.id_client = $id_client 
                            		and comanda.id_client = $id_client
                            		and comanda.id_firma_exec=firme.id 
                            		and comanda.id = idd 
                            		and comanda.deleted = " . CT_COMANDA_NESTERS . ") as firma_exec,        
                            (select nume as contact_sol 
                            	from contact, comanda 
                            	where 
                            		comanda.id_contact_sol=contact.id 
                            		and comanda.id = idd 
                            		and comanda.id_client = $id_client
                            		and comanda.deleted = " . CT_COMANDA_NESTERS . ") as contact_sol,
                            (select nume as contact_exec 
                            	from contact, comanda 
                            	where 
                            		comanda.id_contact_exec=contact.id 
                            		and comanda.id_client = $id_client
                            		and comanda.id = idd 
                            		and comanda.deleted = " . CT_COMANDA_NESTERS . ") as contact_exec                                        
                            FROM comanda
                            LEFT JOIN firme ON firme.id = comanda.id_firma_exec
                            WHERE 
                            	LOWER(firme.nume) LIKE '%$keyword%'
                            	AND comanda.id_client = $id_client
                                AND comanda.deleted = " . CT_COMANDA_NESTERS;
        	
			$query = Comanda::complete_query_SAU_SI($query, $sau_si, $f_sol, $f_exec);
        	                                  
            //----ACUM adresele firmelor----///                                                                          
            $query .= ") UNION DISTINCT ";
            $query .= " (SELECT comanda.id AS idd, comanda.*, 
                            (select nume as firma_sol 
                            	from firme, comanda 
                            	where 
                            		comanda.id_client = $id_client 
                            		and firme.id_client = $id_client 
                            		and comanda.id_firma_sol = firme.id 
                            		and comanda.id = idd 
                            		and comanda.deleted = " . CT_COMANDA_NESTERS . ") as firma_sol, 
                            (select nume as firma_exec 
                            	from firme, comanda 
                            	where 
                            		comanda.id_client=$id_client 
                            		and firme.id_client = $id_client 
                            		and comanda.id_firma_exec=firme.id 
                            		and comanda.id = idd 
                            		and comanda.deleted = " . CT_COMANDA_NESTERS . ") as firma_exec,        
                            (select nume as contact_sol 
                            	from contact, comanda 
                            	where 
                            		comanda.id_contact_sol=contact.id 
                            		and comanda.id_client = $id_client
                            		and comanda.id = idd 
                            		and comanda.deleted = " . CT_COMANDA_NESTERS . ") as contact_sol,
                            (select nume as contact_exec 
                            	from contact, comanda 
                            	where 
                            		comanda.id_contact_exec=contact.id 
                            		and comanda.id_client = $id_client
                            		and comanda.id = idd 
                            		and comanda.deleted = " . CT_COMANDA_NESTERS . ") as contact_exec                                        
                            FROM comanda
                            LEFT JOIN adresa ON adresa.id_owner = comanda.id
                            WHERE 
                            	comanda.id_client = $id_client
                                AND comanda.deleted = " . CT_COMANDA_NESTERS . "
                                AND
                                (
                                       LOWER(adresa.adresa) LIKE '%$keyword%'  
                                    OR LOWER(adresa.oras) LIKE '%$keyword%'  
                                    OR LOWER(adresa.judet) LIKE '%$keyword%'  
                                    OR LOWER(adresa.cod_postal) LIKE '%$keyword%'  
                                    OR LOWER(adresa.tara) LIKE '%$keyword%'  
                                  )
                                AND adresa.tip = " . CT_ADRESA_COMANDA .
                        ")";
			$query = Comanda::complete_query_SAU_SI($query, $sau_si, $f_sol, $f_exec);		    
        }
        else $query .= ")";
        
             
        $query .= " ORDER BY $camp_sort $order";
     
        //din cauza unionului nu am putut face cu SQL_CALC_FOUND_ROWS si am implementat eu LIMITUL
//		echo $query;
//		die();
		
		if (($result = $db->query($query)) === FALSE) {	
           	throw new QueryLoadComandaException("Failed loading comanda");
		}
        $total = 0;
        $poz = 0;
        $comenzi = array();		

 		while ($data = $result->fetch(PDO::FETCH_ASSOC)) {
	        if (!empty($data)) {
                if ($total >= ($pagina * $per_pag) && $poz <= $per_pag) {
                    $poz++;
	        	    $comanda = new Comanda($data['id_client'], $data['created_by']);
		                    
		            $comanda->id_comanda = $data['id'];							            $comanda->id_firma_sol = $data['id_firma_sol'];
		    	    $comanda->nr_factura_sol = $data['nr_factura_sol'];						$comanda->suma_sol = $data['suma_sol'];
		    	    $comanda->taxe_supl_to_sol = $data['taxe_supl_to_sol'];					$comanda->penaliz_from_sol = $data['penaliz_from_sol'];
		    	    $comanda->data_tr_acte_sol = $data['data_tr_acte_sol'];   				//data primirii acetelor de la solicitant
		    	    $comanda->suma_totala_sol = $data['suma_totala_sol'];					$comanda->moneda_sol = $data['moneda_sol'];
		    	    $comanda->id_firma_exec = $data['id_firma_exec'];						$comanda->nr_factura_exec = $data['nr_factura_exec'];
		    	    $comanda->suma_exec = $data['suma_exec'];							    $comanda->taxe_supl_from_exec = $data['taxe_supl_from_exec'];
		    	    $comanda->penaliz_to_exec = $data['penaliz_to_exec'];
		    	    $comanda->data_primirii_acte_exec = $data['data_primirii_acte_exec'];	//data trimiterii actelor catre executant
		    	    $comanda->suma_totala_exec = $data['suma_totala_exec'];					$comanda->moneda_exec = $data['moneda_exec'];
		    	    $comanda->id_contact_sol = $data['id_contact_sol'];						$comanda->id_contact_exec = $data['id_contact_exec'];
                    $comanda->data_scadenta_sol = $data['data_scadenta_sol'];               $comanda->data_scadenta_exec = $data['data_scadenta_exec'];
		    	    $comanda->zile_scadenta_sol = $data['zile_scadenta_sol'];				$comanda->zile_scadenta_exec = $data['zile_scadenta_exec'];
		    	    $comanda->data_factura_sol = $data['data_factura_sol'];					//data facutrarii solicitantului
		    	    $comanda->data_factura_exec = $data['data_factura_exec'];				//data facturarii din partea executantului
		    	    $comanda->coment_sol = $data['coment_sol'];					    		//comentarii
		    	    $comanda->coment_exec = $data['coment_exec'];				        	//comentarii
		    	    $comanda->_cmr_sol = $data['_cmr_sol'];							        $comanda->_factura_sol = $data['_factura_sol'];
		    	    $comanda->_carnet_tir_sol = $data['_carnet_tir_sol'];					$comanda->_decl_vamala_sol = $data['_decl_vamala_sol'];
		    	    $comanda->_alte_acte_sol = $data['_alte_acte_sol'];						$comanda->_text_alte_acte_sol = $data['_text_alte_acte_sol'];
		    	    $comanda->_cmr_exec = $data['_cmr_exec'];							    $comanda->_factura_exec = $data['_factura_exec'];
		    	    $comanda->_carnet_tir_exec = $data['_carnet_tir_exec'];					$comanda->_decl_vamala_exec = $data['_decl_vamala_exec'];
		    	    $comanda->_alte_acte_exec = $data['_alte_acte_exec'];					$comanda->_text_alte_acte_exec = $data['_text_alte_acte_exec'];
		    	    $comanda->stare_incasare_sol = $data['stare_incasare_sol'];				//0 - neincasat = $data['ana']; 1 - partial = $data['ana']; 2 - incasat
		    	    $comanda->stare_plata_exec = $data['stare_plata_exec'];					//0 - neplatit = $data['ana']; 1 - partial = $data['ana']; 2 - platit
		    	    $comanda->nume_sofer = $data['nume_sofer'];							    $comanda->tel_sofer = $data['tel_sofer'];
		    	    $comanda->nr_inmatriculare = $data['nr_inmatriculare'];					$comanda->fel_camion = $data['fel_camion'];
		    	    $comanda->deleted = $data['deleted'];					       			//0 - Nesters = $data['ana']; 1 - Sters
		    	    $comanda->version = $data['version'];					        		//Prin cate modificari a trecut
		    	    $comanda->created_by = $data['created_by'];					    		//Id-ul userului ce a creat comanda
                    $comanda->data_comenzii = $data['data_comenzii'];        
		    	    $comanda->data_comanda_sol = $data['data_comanda_sol'];		
		    	    $comanda->nr_comanda_exec = $data['nr_comanda_exec'];		
		    	    $comanda->nr_comanda_sol = $data['nr_comanda_sol'];		    	    
		    	    $comanda->id_client = $id_client;
		    	    
		    	    $comanda->_external_firma_sol = $data['firma_sol'];
		    	    $comanda->_external_firma_exec = $data['firma_exec'];
		    	    
		    	    $comanda->_external_contact_sol = $data['contact_sol'];
		    	    $comanda->_external_contact_exec = $data['contact_exec'];
		    
		    	    //incarcam adresele   	
		    	    
		            $comanda->adrese_vama_import = Address::queryLoadByComandaForLocuri($db, $comanda->id_comanda, CT_ADRESA_COMANDA_VAMA_IMPORT);    	
		            $comanda->adrese_vama_export = Address::queryLoadByComandaForLocuri($db, $comanda->id_comanda, CT_ADRESA_COMANDA_VAMA_EXPORT);    	
		            $comanda->adrese_incarcare = Address::queryLoadByComandaForLocuri($db, $comanda->id_comanda, CT_ADRESA_COMANDA_INCARCARE);    	
		            $comanda->adrese_descarcare = Address::queryLoadByComandaForLocuri($db, $comanda->id_comanda, CT_ADRESA_COMANDA_DESCARCARE);    	

			        $comanda->nr_km = $data['nr_km'];
			        $comanda->tva_inclus_exec = $data['tva_inclus_exec'];
			        $comanda->status = $data['status'];
                    $comanda->nr_referinta_sol = $data['nr_referinta_sol'];
			        $comanda->interna_externa = $data['interna_externa'];
		            
		            //incarcam platile                     
		            $comanda->plati = Comanda::queryLoadPlatiByComanda($db, $comanda->id_comanda, $id_client);
	        	    
		            $comenzi[] = $comanda;                    
                }
                $total++;
	        }
        }    	
        $arr = array();
        $arr[0] = $comenzi;
        $arr[1] = $total;
        return $arr;			
	}
	
	public static function queryLoadByClientWithPageAndLimitAndCondition($db, $id_client, $pagina, $per_pag, $comanda_incasata, $comanda_platita, $scadenta_incasare, $scadenta_plata, $f_sol, $f_exec, $keyword, $val1, $val2, $camp = null, $order = null, $coloane_comenzi, $pret_min=null, $pret_max=null, $cost_min=null, $cost_max=null, $data_scadenta_sol1=null, $data_scadenta_sol2=null, $data_scadenta_exec1=null, $data_scadenta_exec2=null, $data_factura_sol1=null, $data_factura_sol2=null, $data_factura_exec1=null, $data_factura_exec2=null, $sc_incasare=null, $sc_plata=null, $cond_firme=null, $camp_sort, $sau_si = null) {

		if ($camp == '1incarcare_descarcare' || $camp == '1data_incarcare' || $camp == '1data_descarcare') {
			if ($camp == '1incarcare_descarcare') {
				$filtru1 = "incarcare";
				$filtru2 = "descarcare";
			}
			$camp2 = $camp;
			
			
			if ($camp == '1incarcare_descarcare') {
				$incarcare_index = array();  
				$descarcare_index = array(); 
				unset($camp);
				if ($val1 != -1) {
					$k = 0;
					$comenzi_incarcare = Comanda::getComenzi($db, $id_client, $pagina, $per_pag, $comanda_incasata, $comanda_platita, $scadenta_incasare, $scadenta_plata, $f_sol, $f_exec, $keyword, $val1, $val2, $camp, $order, $coloane_comenzi, $pret_min, $pret_max, $cost_min, $cost_max, $data_scadenta_sol1, $data_scadenta_sol2, $data_scadenta_exec1, $data_scadenta_exec2, $data_factura_sol1, $data_factura_sol2, $data_factura_exec1, $data_factura_exec2, $sc_incasare, $sc_plata, $cond_firme, $camp_sort, $sau_si, "incarcare", $val1);
					foreach ($comenzi_incarcare[0] as $com) {
						$incarcare_index[$k++] = $com->id_comanda;
					}
				}

				if ($val2 != -1) {		
					$k = 0;		
					$comenzi_descarcare = Comanda::getComenzi($db, $id_client, $pagina, $per_pag, $comanda_incasata, $comanda_platita, $scadenta_incasare, $scadenta_plata, $f_sol, $f_exec, $keyword, $val1, $val2, $camp, $order, $coloane_comenzi, $pret_min, $pret_max, $cost_min, $cost_max, $data_scadenta_sol1, $data_scadenta_sol2, $data_scadenta_exec1, $data_scadenta_exec2, $data_factura_sol1, $data_factura_sol2, $data_factura_exec1, $data_factura_exec2, $sc_incasare, $sc_plata, $cond_firme, $camp_sort, $sau_si, "descarcare", $val2);
					foreach ($comenzi_descarcare[0] as $com) {
						$descarcare_index[$k++] = $com->id_comanda;
					} 
				}
				
				$indecsi = array_intersect($incarcare_index, $descarcare_index);
				
				if ($val1 != -1 && $val2 != -1) {					
					foreach ($comenzi_incarcare[0] as $inc) {
						if (in_array($inc->id_comanda, $indecsi))
							$comenzi[] = $inc;
					}
				}
				else if ($val1 != -1 && $val2 == -1) {
					foreach ($comenzi_incarcare[0] as $inc) {
						$comenzi[] = $inc;
					}				
				}
				else if ($val1 == -1 && $val2 != -1) {
					foreach ($comenzi_descarcare[0] as $desc) {
						$comenzi[] = $desc;
					}				
				}
				$arrcomenzi = array();
				$arrcomenzi[0] = $comenzi;
				$arrcomenzi[1] = count($comenzi);
				return $arrcomenzi;
			}
			else {
				$camp = $camp2;
				if ($camp == '1data_incarcare' || $camp == '1data_descarcare') {
			
					$k = 0;
					$filtru = substr($camp, 1);
					unset($camp);
					$comenzi = Comanda::getComenzi($db, $id_client, $pagina, $per_pag, $comanda_incasata, $comanda_platita, $scadenta_incasare, $scadenta_plata, $f_sol, $f_exec, $keyword, $val1, $val2, $camp, $order, $coloane_comenzi, $pret_min, $pret_max, $cost_min, $cost_max, $data_scadenta_sol1, $data_scadenta_sol2, $data_scadenta_exec1, $data_scadenta_exec2, $data_factura_sol1, $data_factura_sol2, $data_factura_exec1, $data_factura_exec2, $sc_incasare, $sc_plata, $cond_firme, $camp_sort, $sau_si, $filtru);
				}			
			}
			
	        return $comenzi;		
		}
		
		$arrcomenzi = Comanda::getComenzi($db, $id_client, $pagina, $per_pag, $comanda_incasata, $comanda_platita, $scadenta_incasare, $scadenta_plata, $f_sol, $f_exec, $keyword, $val1, $val2, $camp, $order, $coloane_comenzi, $pret_min, $pret_max, $cost_min, $cost_max, $data_scadenta_sol1, $data_scadenta_sol2, $data_scadenta_exec1, $data_scadenta_exec2, $data_factura_sol1, $data_factura_sol2, $data_factura_exec1, $data_factura_exec2, $sc_incasare, $sc_plata, $cond_firme, $camp_sort, $sau_si);
		return $arrcomenzi;
		
	}
		
	public static function getFirmeSolOrExecForComanda($db, $id_firma) {
		
		//aceasta metoda primeste parametru id-ul firmei si cauta in tabelul comanda
		//in campurile id_firma_sol si id_firma_exec id-uri egale cu id_firma
		//daca gaseste returneaza TRUE, daca nu returneaza FALSE
		//fac fara prepare ca sa mearga LIMIT!!
		
		$query = "SELECT SQL_CALC_FOUND_ROWS id
	                    				FROM comanda
	                    				WHERE (id_firma_sol = $id_firma OR id_firma_exec = $id_firma)
                                        AND comanda.deleted = ".CT_COMANDA_NESTERS."
	                    				LIMIT 1";
		
		if (($result = $db->query($query)) === FALSE) {			
            $errInfo = $db->errorInfo();
            $errInfo = $errInfo[2];
           	throw new QueryGetFirmeSolOrExecForComanda("Failed searching for firme with id: " . $id_firma . $errInfo);
		}         
		
        $query = "SELECT FOUND_ROWS() AS total";

        if (($result2 = $db->query($query)) === FALSE) {			
            $errInfo = $db->errorInfo();
            $errInfo = $errInfo[2];
           	throw new QueryGetFirmeSolOrExecForComanda("Failed searching for firme with id: " . $id_client . $errInfo);
		}         
        $data2 = $result2->fetch(PDO::FETCH_ASSOC);
        $total = $data2['total'];
        
        if ($total > 0) {
        	return CT_RESULT_OK;
        }
        else return CT_RESULT_FALSE;
	}
	
	public static function getNrComandaAndNrReferintaNou($db, $id_client) {
		// TODO: imbunatateste chestia asta...
        $query = "SELECT id, nr_comanda_exec, nr_referinta_sol
        				FROM comanda
        				WHERE id_client = $id_client
						ORDER BY id DESC
        				LIMIT 1";
		
		if (($result = $db->query($query)) === FALSE) {			
            $errInfo = $db->errorInfo();
                $errInfo = $errInfo[2];
           	throw new QueryGetNrComandaNou("Failed getting the new comanda number for client: " . $id_client . $errInfo);
		}
		
		$data = $result->fetch(PDO::FETCH_ASSOC);
		
		if ($data === FALSE)  {			
           	$ret1 = "1/".date('d').'-'.date('m').'-'.date('Y');
            $ret2 = "1";
		}
        else {
		    $number = 0;
		    $arr = explode('/', $data['nr_comanda_exec']);
		    if (strpos('.', $arr[0])===false && strpos('-', $arr[0])===false)
                $number = (int)$arr[0];
            else
                if (strpos('.', $arr[0])===false && strpos('-', $arr[0])===false)
                    $number = (int)$arr[1];
		    if ($number != 0) {
                $number_nou = $number+1;
		        $nr_com_nou = $number_nou.'/'.date('d').'.'.date('m').'.'.date('Y');
                $ret1 = $nr_com_nou;
            }
            
            // TODO: sa vad care ar fi urmatorul nr_referinta_sol **************************************************
            $ret2 = '';
            $ult_nr_referinta = $data['nr_referinta_sol'];
            if (is_numeric($ult_nr_referinta))
                $ret2 = $ult_nr_referinta + 1;
            else {
                $inc_nr = -1;
                $sf_nr = -1;
                for ($i = 0; $i < strlen($ult_nr_referinta); $i++) {
                    if (is_numeric($ult_nr_referinta[$i]) && $inc_nr == -1)
                        $inc_nr = $i;
                    if (!is_numeric($ult_nr_referinta[$i]) && $inc_nr != -1) {
                        $sf_nr = $i;
                        break;
                    }                
                }
                
                $nr_from_referinta = substr($ult_nr_referinta, $inc_nr, ($sf_nr - $inc_nr));
                $ret2 = substr($ult_nr_referinta, 0, $inc_nr) . ($nr_from_referinta + 1) 
                        . substr($ult_nr_referinta, $sf_nr, strlen($ult_nr_referinta) - $sf_nr);
            }
        }
        $ret = array();
        $ret[0] = $ret1;
        $ret[1] = $ret2;
		return $ret;
	}
	
	public static function getLast_incarcari($db, $id_client, $limit, $incarare_descarcare) {
		$query = "SELECT adresa.data, adresa.id, firme.nume AS firma_sol,
						comanda.nr_referinta_sol, comanda.nr_comanda_exec, comanda.nr_comanda_sol, comanda.id id_comanda,
						UNIX_TIMESTAMP(adresa.data) AS start, UNIX_TIMESTAMP(CURRENT_TIMESTAMP()) AS finish
					FROM adresa
					LEFT JOIN comanda ON comanda.id = adresa.id_owner
					LEFT JOIN firme ON comanda.id_firma_sol = firme.id
					WHERE adresa.tip_loc = $incarare_descarcare
						AND comanda.id_client = $id_client
						AND comanda.deleted = " . CT_COMANDA_NESTERS . "
						AND adresa.tip = " . CT_ADRESA_COMANDA . "
						AND adresa.data_efectiva IS NULL
						AND adresa.data IS NOT NULL		
					ORDER BY adresa.data ASC
					LIMIT $limit";
		if (($result = $db->query($query)) === FALSE) {	
            $errInfo = $db->errorInfo();
            $errInfo = $errInfo[2];
           	throw new QueryLoadComandaException("Failed loading comanda with condition: " . $query . $errInfo);
		}
		
		$adrese = array();
		$k = 0;
		while ($data = $result->fetch(PDO::FETCH_ASSOC)) {
			$adresa = Address::queryLoadAddress($db, $data['id']);
			$adrese[$k]['adresa'] = $adresa;
			$adrese[$k]['firma_sol'] = $data['firma_sol'];	
			$adrese[$k]['start'] = $data['start'];
			$adrese[$k]['finish'] = $data['finish'];
			$adrese[$k]['nr_referinta_sol'] = $data['nr_referinta_sol'];
			$adrese[$k]['nr_comanda_exec'] = $data['nr_comanda_exec'];
            $adrese[$k]['nr_comanda_sol'] = $data['nr_comanda_sol'];
			$adrese[$k]['id_comanda'] = $data['id_comanda'];
			$k++;												
		}
		return $adrese;
	}
	
	//gets last $limit comenzi ordonate dupa data_scadenta_sol from db
	public static function getLast_incasari($db, $id_client, $limit) {

		$query = "SELECT *, DATEDIFF(data_scadenta_sol, CURDATE()) AS nr_zile 
						FROM comanda
	                	WHERE id_client = $id_client
	                		AND deleted = " . CT_COMANDA_NESTERS . "	                		
	                		AND (stare_incasare_sol = " . CT_COMANDA_INCASATA_PARTIAL . "
	                		OR stare_incasare_sol = " . CT_COMANDA_NEINCASATA . ")
	                		AND data_scadenta_sol IS NOT NULL
	                		AND data_scadenta_sol != '0000-00-00'
						ORDER BY data_scadenta_sol DESC
						LIMIT $limit";

		if (($result = $db->query($query)) === FALSE) {	
            $errInfo = $db->errorInfo();
                $errInfo = $errInfo[2];
           	throw new QueryLoadComandaException("Failed loading comanda with condition: " . $conditie . $errInfo);
		}

        $comenzi = array();	
        $nr_zile_dif = array();	

 		while ($data = $result->fetch(PDO::FETCH_ASSOC)) {
	        if (!empty($data)) {
	        	$comanda = new Comanda($data['id_client'], $data['created_by']);
		                
		        $comanda->id_comanda = $data['id'];							            $comanda->id_firma_sol = $data['id_firma_sol'];
		    	$comanda->nr_factura_sol = $data['nr_factura_sol'];						$comanda->suma_sol = $data['suma_sol'];
		    	$comanda->taxe_supl_to_sol = $data['taxe_supl_to_sol'];					$comanda->penaliz_from_sol = $data['penaliz_from_sol'];
		    	$comanda->data_tr_acte_sol = $data['data_tr_acte_sol'];   //data primirii acetelor de la solicitant
		    	$comanda->suma_totala_sol = $data['suma_totala_sol'];					$comanda->moneda_sol = $data['moneda_sol'];
		    	$comanda->id_firma_exec = $data['id_firma_exec'];						$comanda->nr_factura_exec = $data['nr_factura_exec'];
		    	$comanda->suma_exec = $data['suma_exec'];							    $comanda->taxe_supl_from_exec = $data['taxe_supl_from_exec'];
		    	$comanda->penaliz_to_exec = $data['penaliz_to_exec'];
		    	$comanda->data_primirii_acte_exec = $data['data_primirii_acte_exec'];		//data trimiterii actelor catre executant
		    	$comanda->suma_totala_exec = $data['suma_totala_exec'];					$comanda->moneda_exec = $data['moneda_exec'];
		    	$comanda->id_contact_sol = $data['id_contact_sol'];						$comanda->id_contact_exec = $data['id_contact_exec'];
                $comanda->data_scadenta_sol = $data['data_scadenta_sol'];                $comanda->data_scadenta_exec = $data['data_scadenta_exec'];
		    	$comanda->zile_scadenta_sol = $data['zile_scadenta_sol'];				$comanda->zile_scadenta_exec = $data['zile_scadenta_exec'];
		    	$comanda->data_factura_sol = $data['data_factura_sol'];			//data facutrarii solicitantului
		    	$comanda->data_factura_exec = $data['data_factura_exec'];		//data facturarii din partea executantului
		    	$comanda->coment_sol = $data['coment_sol'];					    //comentarii
		    	$comanda->coment_exec = $data['coment_exec'];				        //comentarii
		    	$comanda->_cmr_sol = $data['_cmr_sol'];							        $comanda->_factura_sol = $data['_factura_sol'];
		    	$comanda->_carnet_tir_sol = $data['_carnet_tir_sol'];					$comanda->_decl_vamala_sol = $data['_decl_vamala_sol'];
		    	$comanda->_alte_acte_sol = $data['_alte_acte_sol'];						$comanda->_text_alte_acte_sol = $data['_text_alte_acte_sol'];
		    	$comanda->_cmr_exec = $data['_cmr_exec'];							    $comanda->_factura_exec = $data['_factura_exec'];
		    	$comanda->_carnet_tir_exec = $data['_carnet_tir_exec'];					$comanda->_decl_vamala_exec = $data['_decl_vamala_exec'];
		    	$comanda->_alte_acte_exec = $data['_alte_acte_exec'];					$comanda->_text_alte_acte_exec = $data['_text_alte_acte_exec'];
		    	$comanda->stare_incasare_sol = $data['stare_incasare_sol'];		//0 - neincasat = $data['ana']; 1 - partial = $data['ana']; 2 - incasat
		    	$comanda->stare_plata_exec = $data['stare_plata_exec'];			//0 - neplatit = $data['ana']; 1 - partial = $data['ana']; 2 - platit
		    	$comanda->nume_sofer = $data['nume_sofer'];							    $comanda->tel_sofer = $data['tel_sofer'];
		    	$comanda->nr_inmatriculare = $data['nr_inmatriculare'];					$comanda->fel_camion = $data['fel_camion'];
		    	$comanda->deleted = $data['deleted'];					        //0 - Nesters = $data['ana']; 1 - Sters
		    	$comanda->version = $data['version'];					        //Prin cate modificari a trecut
		    	$comanda->created_by = $data['created_by'];					    //Id-ul userului ce a creat comanda
                $comanda->data_comenzii = $data['data_comenzii'];        
		    	$comanda->data_comanda_sol = $data['data_comanda_sol'];		
		    	$comanda->nr_comanda_exec = $data['nr_comanda_exec'];		
		    	$comanda->nr_comanda_sol = $data['nr_comanda_sol'];		
		    	$comanda->id_client = $id_client;
		
		    	//incarcam adresele   	
		    	
		        $comanda->adrese_vama_import = Address::queryLoadByComandaForLocuri($db, $comanda->id_comanda, CT_ADRESA_COMANDA_VAMA_IMPORT);    	
		        $comanda->adrese_vama_export = Address::queryLoadByComandaForLocuri($db, $comanda->id_comanda, CT_ADRESA_COMANDA_VAMA_EXPORT);    	
		        $comanda->adrese_incarcare = Address::queryLoadByComandaForLocuri($db, $comanda->id_comanda, CT_ADRESA_COMANDA_INCARCARE);    	
		        $comanda->adrese_descarcare = Address::queryLoadByComandaForLocuri($db, $comanda->id_comanda, CT_ADRESA_COMANDA_DESCARCARE);    	
		    	
		        $comanda->nr_km = $data['nr_km'];
		        $comanda->tva_inclus_exec = $data['tva_inclus_exec'];
		        $comanda->status = $data['status'];
                $comanda->nr_referinta_sol = $data['nr_referinta_sol'];
		        $comanda->interna_externa = $data['interna_externa'];
			        	        
		        //incarcam platile                     
		        $comanda->plati = Comanda::queryLoadPlatiByComanda($db, $comanda->id_comanda, $id_client);
	        	
		        $comenzi[] = $comanda;
		        $nr_zile_dif[] = $data['nr_zile'];	
	        }
        }    	
        $comenzi_zile[0] = $comenzi;
        $comenzi_zile[1] = $nr_zile_dif;      
        return $comenzi_zile;	
	}
	
	public static function getLast_plati($db, $id_client, $limit) {

		$query = "SELECT *, DATEDIFF(data_scadenta_exec, CURDATE()) AS nr_zile FROM comanda
	                	WHERE id_client = $id_client 
	                		AND deleted = " . CT_COMANDA_NESTERS . "	                	
	                		AND (stare_plata_exec = " . CT_COMANDA_NEPLATITA . "
	                				OR stare_plata_exec = " . CT_COMANDA_PLATITA_PARTIAL . ")
	                		AND data_scadenta_exec != ''
	                		AND data_scadenta_exec != '0000-00-00'
						ORDER BY data_scadenta_exec DESC
						LIMIT $limit";
		
		if (($result = $db->query($query)) === FALSE) {	
            $errInfo = $db->errorInfo();
                $errInfo = $errInfo[2];
           	throw new QueryLoadComandaException("Failed loading comanda with condition: " . $conditie . $errInfo);
		}

        $comenzi = array();		
		$nr_zile_dif = array();
		
 		while ($data = $result->fetch(PDO::FETCH_ASSOC)) {
	        if (!empty($data)) {
	        	$comanda = new Comanda($data['id_client'], $data['created_by']);
		                
		        $comanda->id_comanda = $data['id'];							            $comanda->id_firma_sol = $data['id_firma_sol'];
		    	$comanda->nr_factura_sol = $data['nr_factura_sol'];						$comanda->suma_sol = $data['suma_sol'];
		    	$comanda->taxe_supl_to_sol = $data['taxe_supl_to_sol'];					$comanda->penaliz_from_sol = $data['penaliz_from_sol'];
		    	$comanda->data_tr_acte_sol = $data['data_tr_acte_sol'];   //data primirii acetelor de la solicitant
		    	$comanda->suma_totala_sol = $data['suma_totala_sol'];					$comanda->moneda_sol = $data['moneda_sol'];
		    	$comanda->id_firma_exec = $data['id_firma_exec'];						$comanda->nr_factura_exec = $data['nr_factura_exec'];
		    	$comanda->suma_exec = $data['suma_exec'];							    $comanda->taxe_supl_from_exec = $data['taxe_supl_from_exec'];
		    	$comanda->penaliz_to_exec = $data['penaliz_to_exec'];
		    	$comanda->data_primirii_acte_exec = $data['data_primirii_acte_exec'];		//data trimiterii actelor catre executant
		    	$comanda->suma_totala_exec = $data['suma_totala_exec'];					$comanda->moneda_exec = $data['moneda_exec'];
		    	$comanda->id_contact_sol = $data['id_contact_sol'];						$comanda->id_contact_exec = $data['id_contact_exec'];
                $comanda->data_scadenta_sol = $data['data_scadenta_sol'];                $comanda->data_scadenta_exec = $data['data_scadenta_exec'];
		    	$comanda->zile_scadenta_sol = $data['zile_scadenta_sol'];				$comanda->zile_scadenta_exec = $data['zile_scadenta_exec'];
		    	$comanda->data_factura_sol = $data['data_factura_sol'];			//data facutrarii solicitantului
		    	$comanda->data_factura_exec = $data['data_factura_exec'];		//data facturarii din partea executantului
		    	$comanda->coment_sol = $data['coment_sol'];					    //comentarii
		    	$comanda->coment_exec = $data['coment_exec'];				        //comentarii
		    	$comanda->_cmr_sol = $data['_cmr_sol'];							        $comanda->_factura_sol = $data['_factura_sol'];
		    	$comanda->_carnet_tir_sol = $data['_carnet_tir_sol'];					$comanda->_decl_vamala_sol = $data['_decl_vamala_sol'];
		    	$comanda->_alte_acte_sol = $data['_alte_acte_sol'];						$comanda->_text_alte_acte_sol = $data['_text_alte_acte_sol'];
		    	$comanda->_cmr_exec = $data['_cmr_exec'];							    $comanda->_factura_exec = $data['_factura_exec'];
		    	$comanda->_carnet_tir_exec = $data['_carnet_tir_exec'];					$comanda->_decl_vamala_exec = $data['_decl_vamala_exec'];
		    	$comanda->_alte_acte_exec = $data['_alte_acte_exec'];					$comanda->_text_alte_acte_exec = $data['_text_alte_acte_exec'];
		    	$comanda->stare_incasare_sol = $data['stare_incasare_sol'];		//0 - neincasat = $data['ana']; 1 - partial = $data['ana']; 2 - incasat
		    	$comanda->stare_plata_exec = $data['stare_plata_exec'];			//0 - neplatit = $data['ana']; 1 - partial = $data['ana']; 2 - platit
		    	$comanda->nume_sofer = $data['nume_sofer'];							    $comanda->tel_sofer = $data['tel_sofer'];
		    	$comanda->nr_inmatriculare = $data['nr_inmatriculare'];					$comanda->fel_camion = $data['fel_camion'];
		    	$comanda->deleted = $data['deleted'];					        //0 - Nesters = $data['ana']; 1 - Sters
		    	$comanda->version = $data['version'];					        //Prin cate modificari a trecut
		    	$comanda->created_by = $data['created_by'];					    //Id-ul userului ce a creat comanda
                $comanda->data_comenzii = $data['data_comenzii'];        
		    	$comanda->data_comanda_sol = $data['data_comanda_sol'];		
		    	$comanda->nr_comanda_exec = $data['nr_comanda_exec'];		
		    	$comanda->nr_comanda_sol = $data['nr_comanda_sol'];		
		    	$comanda->id_client = $id_client;
		
		        $comanda->nr_km = $data['nr_km'];
		        $comanda->tva_inclus_exec = $data['tva_inclus_exec'];
		        $comanda->status = $data['status'];
                $comanda->nr_referinta_sol = $data['nr_referinta_sol'];
		        $comanda->interna_externa = $data['interna_externa'];
		    		        
		    	//incarcam adresele   	
		    	
		        $comanda->adrese_vama_import = Address::queryLoadByComandaForLocuri($db, $comanda->id_comanda, CT_ADRESA_COMANDA_VAMA_IMPORT);    	
		        $comanda->adrese_vama_export = Address::queryLoadByComandaForLocuri($db, $comanda->id_comanda, CT_ADRESA_COMANDA_VAMA_EXPORT);    	
		        $comanda->adrese_incarcare = Address::queryLoadByComandaForLocuri($db, $comanda->id_comanda, CT_ADRESA_COMANDA_INCARCARE);    	
		        $comanda->adrese_descarcare = Address::queryLoadByComandaForLocuri($db, $comanda->id_comanda, CT_ADRESA_COMANDA_DESCARCARE);    	
		    	
		        //incarcam platile                     
		        $comanda->plati = Comanda::queryLoadPlatiByComanda($db, $comanda->id_comanda, $id_client);
		        
		        $comenzi[] = $comanda;
		        $nr_zile_dif[] = $data['nr_zile'];	
	        }
        }    	
        $comenzi_zile[0] = $comenzi;
        $comenzi_zile[1] = $nr_zile_dif;         				        
        return $comenzi_zile;	
	}

	public static function get_nr_comenzi_ultimele_zile($db, $id_client, $nr_zile) {
		
		//cate comenzi au fost facute in ultimele $nr zile
		$query = "SELECT COUNT(id) AS nr
						FROM comanda
						WHERE data_comenzii >= (CURDATE() - INTERVAL " . $nr_zile . " DAY)
                        AND id_client = $id_client";
										
		if (($result = $db->query($query)) === FALSE) {	
            $errInfo = $db->errorInfo();
                $errInfo = $errInfo[2];
           	throw new QueryLoadComandaException("Failed selecting last comenzi" . $errInfo);
		}
        
 		$data = $result->fetch(PDO::FETCH_ASSOC);
	    $var1 = $data['nr'];
		
	    //cate comenzi au fost incasate in ultimele $nr zile
		$query = "SELECT COUNT(c.id) AS nr
						FROM comanda c, plati_comanda p
						WHERE p.data >= (CURDATE() - INTERVAL " . $nr_zile . " DAY)
                        AND c.id_client = $id_client
                        AND p.id_comanda = c.id
							AND c.stare_incasare_sol  = " . CT_COMANDA_INCASATA;
										
		if (($result = $db->query($query)) === FALSE) {	
            $errInfo = $db->errorInfo();
                $errInfo = $errInfo[2];
           	throw new QueryLoadComandaException("Failed selecting last comenzi" . $errInfo);
		}
        
 		$data = $result->fetch(PDO::FETCH_ASSOC);
	    $var2 = $data['nr'];	 
	    
	    //cate comenzi au fost platite in ultimele $nr zile
		$query = "SELECT COUNT(c.id) AS nr
						FROM comanda c, plati_comanda p
						WHERE p.data >= (CURDATE() - INTERVAL " . $nr_zile . " DAY)
                        AND c.id_client = $id_client
                        AND p.id_comanda = c.id
							AND c.stare_plata_exec  = " . CT_COMANDA_PLATITA;
										
		if (($result = $db->query($query)) === FALSE) {	
            $errInfo = $db->errorInfo();
                $errInfo = $errInfo[2];
           	throw new QueryLoadComandaException("Failed selecting last comenzi" . $errInfo);
		}
        
 		$data = $result->fetch(PDO::FETCH_ASSOC);
	    $var3 = $data['nr'];	   
	     
	    //cate comenzi au fost platite partial in ultimele $nr zile
		$query = "SELECT COUNT(c.id) AS nr
						FROM comanda c, plati_comanda p
						WHERE p.data >= (CURDATE() - INTERVAL " . $nr_zile . " DAY)
                        AND c.id_client = $id_client
                        AND p.id_comanda = c.id
							AND c.stare_plata_exec  = " . CT_COMANDA_PLATITA_PARTIAL;
										
		if (($result = $db->query($query)) === FALSE) {	
            $errInfo = $db->errorInfo();
                $errInfo = $errInfo[2];
           	throw new QueryLoadComandaException("Failed selecting last comenzi" . $errInfo);
		}
        
 		$data = $result->fetch(PDO::FETCH_ASSOC);
	    $var4 = $data['nr'];	  
	       
	    //cate comenzi au fost incasate partial in ultimele $nr zile
		$query = "SELECT COUNT(c.id) AS nr
						FROM comanda c, plati_comanda p
						WHERE p.data >= (CURDATE() - INTERVAL " . $nr_zile . " DAY)
                        AND c.id_client = $id_client
                        AND p.id_comanda = c.id
							AND c.stare_incasare_sol  = " . CT_COMANDA_INCASATA_PARTIAL;
										
		if (($result = $db->query($query)) === FALSE) {	
            $errInfo = $db->errorInfo();
                $errInfo = $errInfo[2];
           	throw new QueryLoadComandaException("Failed selecting last comenzi" . $errInfo);
		}
        
 		$data = $result->fetch(PDO::FETCH_ASSOC);
	    $var5 = $data['nr'];	 	       
	    
	    $return_values = array();
	    $return_values[0] = $var1;   // nr total comenzi
	    $return_values[1] = $var2;   // incasate total
	    $return_values[2] = $var3;	 // platite total
	    $return_values[3] = $var4;	 // platite partial
	    $return_values[4] = $var5;   // incasate partial
	    return $return_values;
	}
	
	public static function getComenziByIncarcareDescarcare($db, $id_client, $pagina, $per_pag, $comanda_incasata, $comanda_platita, $scadenta_incasare, $scadenta_plata, $f_sol, $f_exec, $keyword, $val1, $val2, $camp = null, $order = null, $coloane_comenzi, $pret_min=null, $pret_max=null, $cost_min=null, $cost_max=null, $data_scadenta_sol1=null, $data_scadenta_sol2=null, $data_scadenta_exec1=null, $data_scadenta_exec2=null, $data_factura_sol1=null, $data_factura_sol2=null, $data_factura_exec1=null, $data_factura_exec2=null, $sc_incasare=null, $sc_plata=null, $cond_firme=null, $camp_sort, $sau_si = null) {
		
		/*
		 * in primul rand am sa extrag toate comenziile acelui client
		 * filtrate de celelalte optiuni din formul de cautare de pe pagina de vizualizare a comenziilor.
		 * Apoi pentru fiecare comanda voi extrage adresa de incarcare si descarcare
		 * si daca se potriveste cu ce a dat omnul atunci o pun ca rezultat valid
		 * 
		 */	
		
		$arrComenzi = Comanda::getComenzi($db, $id_client, $pagina, $per_pag, $comanda_incasata, $comanda_platita, $scadenta_incasare, $scadenta_plata, $f_sol, $f_exec, $keyword, $val1, $val2, $camp, $order, $coloane_comenzi, $pret_min, $pret_max, $cost_min, $cost_max, $data_scadenta_sol1, $data_scadenta_sol2, $data_scadenta_exec1, $data_scadenta_exec2, $data_factura_sol1, $data_factura_sol2, $data_factura_exec1, $data_factura_exec2, $sc_incasare, $sc_plata, $cond_firme, $camp_sort, $sau_si, true);
		$comenzi = $arrComenzi[0];
		
		$intTotal = $arrComenzi[1];
		
		
		$comenzi_final = array();
		
		for ($i = 0; $i < $intTotal; $i++) {
			if ($val1 != '' && $val1 != -1) {
				// adica a dat filtru de incarcare
				$incarcare = Address::queryLoadByComandaIncarcareDescarcare($db, $comenzi[$i]->id_comanda, $val1, CT_ADRESA_COMANDA_INCARCARE);
				if ($incarcare) {				
					if ($val2 != '' && $val2 != -1) { 
						$descarcare = Address::queryLoadByComandaIncarcareDescarcare($db, $comenzi[$i]->id_comanda, $val2, CT_ADRESA_COMANDA_DESCARCARE);
						if ($descarcare) {							
							$comenzi_final[] = $comenzi[$i]; 					
						}
					}
					else {
						//adica a dat doar incarcare si a gasit ceva pentru incarcare
						$comenzi_final[] = $comenzi[$i];
					}
				}
			}
			if ($val2 != '' && $val2 != -1 && $val1 == -1) {
				
				// adica a dat filtru de descarcare DOAR...ca daca era si incarcare il prindea in primul if
				$descarcare = Address::queryLoadByComandaIncarcareDescarcare($db, $comenzi[$i]->id_comanda, $val2, CT_ADRESA_COMANDA_DESCARCARE);
				if ($descarcare) $comenzi_final[] = $comenzi[$i]; 					
			}			
		}
		
		$arrfinal = array();
		$arrfinal[0] = $comenzi_final;
		$arrfinal[1] = count($comenzi_final);
		
		return $arrfinal;
	}
    
    public static function queryLoadByIdClientAndNrReferintaSol($db, $id_client, $nr_referinta_sol) {        
        $query = $db->prepare("SELECT *
                                FROM comanda
                                WHERE id_client = :id_client AND deleted = :deleted 
                                    AND nr_referinta_sol = :nr_referinta_sol LIMIT 1");
                
        $query->bindParam(':id_client',         $id_client);
        $query->bindValue(':deleted',           CT_NOT_DELETED);
        $query->bindValue(':nr_referinta_sol',  $nr_referinta_sol);
        
        if ($query->execute() === FALSE) { 
            $errInfo = $query->errorInfo();
            $errInfo = $errInfo[2];
            $query->closeCursor();            
            throw new QueryLoadComandaException("Failed loading comanda with id_client " . $id_client . $errInfo);            
        }
        
        $comenzi = array();     
        //TODO
        //$query->closeCursor();   

        $data = $query->fetch(PDO::FETCH_ASSOC);
        $comanda = new Comanda($data['id_client'], $data['created_by']);
                
        $comanda->id_comanda = $data['id'];                                        $comanda->id_firma_sol = $data['id_firma_sol'];
        $comanda->nr_factura_sol = $data['nr_factura_sol'];                        $comanda->suma_sol = $data['suma_sol'];
        $comanda->taxe_supl_to_sol = $data['taxe_supl_to_sol'];                    $comanda->penaliz_from_sol = $data['penaliz_from_sol'];
        $comanda->data_tr_acte_sol = $data['data_tr_acte_sol'];   //data primirii acetelor de la solicitant
        $comanda->suma_totala_sol = $data['suma_totala_sol'];                    $comanda->moneda_sol = $data['moneda_sol'];
        $comanda->id_firma_exec = $data['id_firma_exec'];                        $comanda->nr_factura_exec = $data['nr_factura_exec'];
        $comanda->suma_exec = $data['suma_exec'];                                $comanda->taxe_supl_from_exec = $data['taxe_supl_from_exec'];
        $comanda->penaliz_to_exec = $data['penaliz_to_exec'];
        $comanda->data_primirii_acte_exec = $data['data_primirii_acte_exec'];        //data trimiterii actelor catre executant
        $comanda->suma_totala_exec = $data['suma_totala_exec'];                    $comanda->moneda_exec = $data['moneda_exec'];
        $comanda->id_contact_sol = $data['id_contact_sol'];                        $comanda->id_contact_exec = $data['id_contact_exec'];
        $comanda->data_scadenta_sol = $data['data_scadenta_sol'];                $comanda->data_scadenta_exec = $data['data_scadenta_exec'];
        $comanda->zile_scadenta_sol = $data['zile_scadenta_sol'];                $comanda->zile_scadenta_exec = $data['zile_scadenta_exec'];
        $comanda->data_factura_sol = $data['data_factura_sol'];            //data facutrarii solicitantului
        $comanda->data_factura_exec = $data['data_factura_exec'];        //data facturarii din partea executantului
        $comanda->coment_sol = $data['coment_sol'];                        //comentarii
        $comanda->coment_exec = $data['coment_exec'];                        //comentarii
        $comanda->_cmr_sol = $data['_cmr_sol'];                                    $comanda->_factura_sol = $data['_factura_sol'];
        $comanda->_carnet_tir_sol = $data['_carnet_tir_sol'];                    $comanda->_decl_vamala_sol = $data['_decl_vamala_sol'];
        $comanda->_alte_acte_sol = $data['_alte_acte_sol'];                        $comanda->_text_alte_acte_sol = $data['_text_alte_acte_sol'];
        $comanda->_cmr_exec = $data['_cmr_exec'];                                $comanda->_factura_exec = $data['_factura_exec'];
        $comanda->_carnet_tir_exec = $data['_carnet_tir_exec'];                    $comanda->_decl_vamala_exec = $data['_decl_vamala_exec'];
        $comanda->_alte_acte_exec = $data['_alte_acte_exec'];                    $comanda->_text_alte_acte_exec = $data['_text_alte_acte_exec'];
        $comanda->stare_incasare_sol = $data['stare_incasare_sol'];        //0 - neincasat = $data['ana']; 1 - partial = $data['ana']; 2 - incasat
        $comanda->stare_plata_exec = $data['stare_plata_exec'];            //0 - neplatit = $data['ana']; 1 - partial = $data['ana']; 2 - platit
        $comanda->nume_sofer = $data['nume_sofer'];                                $comanda->tel_sofer = $data['tel_sofer'];
        $comanda->nr_inmatriculare = $data['nr_inmatriculare'];                    $comanda->fel_camion = $data['fel_camion'];
        $comanda->deleted = $data['deleted'];                            //0 - Nesters = $data['ana']; 1 - Sters
        $comanda->version = $data['version'];                            //Prin cate modificari a trecut
        $comanda->created_by = $data['created_by'];                        //Id-ul userului ce a creat comanda
        $comanda->data_comenzii = $data['data_comenzii'];    
        $comanda->data_comanda_sol = $data['data_comanda_sol'];    
        $comanda->nr_comanda_exec = $data['nr_comanda_exec'];        
        $comanda->nr_comanda_sol = $data['nr_comanda_sol'];            
        $comanda->id_client = $id_client;

        $comanda->nr_km = $data['nr_km'];
        $comanda->tva_inclus_exec = $data['tva_inclus_exec'];
        $comanda->status = $data['status'];
        $comanda->nr_referinta_sol = $data['nr_referinta_sol'];
        $comanda->interna_externa = $data['interna_externa'];
                    
        //incarcam adresele                   
        $comanda->adrese_vama_import = Address::queryLoadByComandaForLocuri($db, $comanda->id_comanda, CT_ADRESA_COMANDA_VAMA_IMPORT);
        $comanda->adrese_vama_export = Address::queryLoadByComandaForLocuri($db, $comanda->id_comanda, CT_ADRESA_COMANDA_VAMA_EXPORT);        
        $comanda->adrese_incarcare = Address::queryLoadByComandaForLocuri($db, $comanda->id_comanda, CT_ADRESA_COMANDA_INCARCARE);        
        $comanda->adrese_descarcare = Address::queryLoadByComandaForLocuri($db, $comanda->id_comanda, CT_ADRESA_COMANDA_DESCARCARE);        
            
        //incarcam platile                     
        $comanda->plati = Comanda::queryLoadPlatiByComanda($db, $comanda->id_comanda, $id_client);
        $query->closeCursor();
        return $comanda;        
    }
}

?>